From 19c778bc375f5e375aa4c54065fa0aac49383894 Mon Sep 17 00:00:00 2001 From: Maxim Pimenov Date: Thu, 21 Mar 2019 00:17:12 +0300 Subject: [search] [assessment-tool] Stopped filling unknown positions in samples with zeros. --- .../search_quality/assessment_tool/main_model.cpp | 6 ++--- .../search_quality/assessment_tool/main_view.cpp | 6 ++--- .../search_quality/assessment_tool/main_view.hpp | 4 +-- .../search_quality/assessment_tool/sample_view.cpp | 14 +++++----- .../search_quality/assessment_tool/sample_view.hpp | 7 ++--- search/search_quality/assessment_tool/view.hpp | 6 +++-- search/search_quality/helpers.cpp | 30 +++++++++++++++++----- search/search_quality/helpers.hpp | 9 +++++-- search/search_quality/sample.cpp | 14 +++------- search/search_quality/sample.hpp | 5 ++-- .../search_quality_tests/sample_test.cpp | 11 +++----- 11 files changed, 64 insertions(+), 48 deletions(-) (limited to 'search') diff --git a/search/search_quality/assessment_tool/main_model.cpp b/search/search_quality/assessment_tool/main_model.cpp index d55b68a873..77163047e0 100644 --- a/search/search_quality/assessment_tool/main_model.cpp +++ b/search/search_quality/assessment_tool/main_model.cpp @@ -120,7 +120,7 @@ void MainModel::OnSampleSelected(int index) auto & context = m_contexts[index]; auto const & sample = context.m_sample; - m_view->ShowSample(index, sample, sample.m_posAvailable, sample.m_pos, context.HasChanges()); + m_view->ShowSample(index, sample, sample.m_pos, context.HasChanges()); ResetSearch(); auto const timestamp = m_queryTimestamp; @@ -218,8 +218,8 @@ void MainModel::OnShowPositionClicked() auto const & context = m_contexts[m_selectedSample]; vector points; - if (context.m_sample.m_posAvailable) - points.push_back(context.m_sample.m_pos); + if (context.m_sample.m_pos) + points.push_back(*context.m_sample.m_pos); size_t resultsAdded = 0; for (auto const & result : context.m_foundResults) diff --git a/search/search_quality/assessment_tool/main_view.cpp b/search/search_quality/assessment_tool/main_view.cpp index 7fdf191268..66090ccd96 100644 --- a/search/search_quality/assessment_tool/main_view.cpp +++ b/search/search_quality/assessment_tool/main_view.cpp @@ -99,14 +99,14 @@ void MainView::OnSearchCompleted() m_sampleView->OnSearchCompleted(); } -void MainView::ShowSample(size_t sampleIndex, search::Sample const & sample, bool positionAvailable, - m2::PointD const & position, bool hasEdits) +void MainView::ShowSample(size_t sampleIndex, search::Sample const & sample, + boost::optional const & position, bool hasEdits) { m_sampleLocale = sample.m_locale; MoveViewportToRect(sample.m_viewport); - m_sampleView->SetContents(sample, positionAvailable, position); + m_sampleView->SetContents(sample, position); m_sampleView->show(); OnResultChanged(sampleIndex, ResultType::Found, Edits::Update::MakeAll()); diff --git a/search/search_quality/assessment_tool/main_view.hpp b/search/search_quality/assessment_tool/main_view.hpp index fc228d4df9..62b5715bc2 100644 --- a/search/search_quality/assessment_tool/main_view.hpp +++ b/search/search_quality/assessment_tool/main_view.hpp @@ -32,8 +32,8 @@ public: void SetSamples(ContextList::SamplesSlice const & samples) override; void OnSearchStarted() override; void OnSearchCompleted() override; - void ShowSample(size_t sampleIndex, search::Sample const & sample, bool positionAvailable, - m2::PointD const & position, bool hasEdits) override; + void ShowSample(size_t sampleIndex, search::Sample const & sample, + boost::optional const & position, bool hasEdits) override; void AddFoundResults(search::Results::ConstIter begin, search::Results::ConstIter end) override; void ShowNonFoundResults(std::vector const & results, diff --git a/search/search_quality/assessment_tool/sample_view.cpp b/search/search_quality/assessment_tool/sample_view.cpp index 0a8418e1ef..77ec0abc1c 100644 --- a/search/search_quality/assessment_tool/sample_view.cpp +++ b/search/search_quality/assessment_tool/sample_view.cpp @@ -167,8 +167,8 @@ SampleView::SampleView(QWidget * parent, Framework & framework) Clear(); } -void SampleView::SetContents(search::Sample const & sample, bool positionAvailable, - m2::PointD const & position) +void SampleView::SetContents(search::Sample const & sample, + boost::optional const & position) { if (!sample.m_query.empty()) { @@ -189,9 +189,9 @@ void SampleView::SetContents(search::Sample const & sample, bool positionAvailab m_relatedQueriesBox->show(); ClearAllResults(); - m_positionAvailable = positionAvailable; - if (m_positionAvailable) - ShowUserPosition(position); + m_position = position; + if (m_position) + ShowUserPosition(*m_position); else HideUserPosition(); } @@ -209,7 +209,7 @@ void SampleView::OnSearchCompleted() { m_spinner->Hide(); auto const resultsAvailable = m_foundResults->HasResultsWithPoints(); - if (m_positionAvailable) + if (m_position) { if (resultsAvailable) m_showPosition->setText(tr("Show position and top results")); @@ -319,7 +319,7 @@ void SampleView::Clear() ClearAllResults(); HideUserPosition(); - m_positionAvailable = false; + m_position = boost::none; OnSearchCompleted(); } diff --git a/search/search_quality/assessment_tool/sample_view.hpp b/search/search_quality/assessment_tool/sample_view.hpp index 0840b32c85..8bb15ad4c9 100644 --- a/search/search_quality/assessment_tool/sample_view.hpp +++ b/search/search_quality/assessment_tool/sample_view.hpp @@ -6,6 +6,8 @@ #include "geometry/point2d.hpp" +#include + #include #include @@ -25,8 +27,7 @@ public: SampleView(QWidget * parent, Framework & framework); - void SetContents(search::Sample const & sample, bool positionAvailable, - m2::PointD const & position); + void SetContents(search::Sample const & sample, boost::optional const & position); void OnSearchStarted(); void OnSearchCompleted(); @@ -89,5 +90,5 @@ private: QMargins m_rightAreaMargins; QMargins m_defaultMargins; - bool m_positionAvailable = false; + boost::optional m_position; }; diff --git a/search/search_quality/assessment_tool/view.hpp b/search/search_quality/assessment_tool/view.hpp index 4e319f3e1d..ca2d6efdf7 100644 --- a/search/search_quality/assessment_tool/view.hpp +++ b/search/search_quality/assessment_tool/view.hpp @@ -12,6 +12,8 @@ #include #include +#include + class Edits; class Model; @@ -31,8 +33,8 @@ public: virtual void SetSamples(ContextList::SamplesSlice const & samples) = 0; virtual void OnSearchStarted() = 0; virtual void OnSearchCompleted() = 0; - virtual void ShowSample(size_t index, search::Sample const & sample, bool positionAvailable, - m2::PointD const & position, bool hasEdits) = 0; + virtual void ShowSample(size_t index, search::Sample const & sample, + boost::optional const & position, bool hasEdits) = 0; virtual void AddFoundResults(search::Results::ConstIter begin, search::Results::ConstIter end) = 0; diff --git a/search/search_quality/helpers.cpp b/search/search_quality/helpers.cpp index dc9c76e392..8ac32d44a2 100644 --- a/search/search_quality/helpers.cpp +++ b/search/search_quality/helpers.cpp @@ -6,6 +6,7 @@ #include "std/target_os.hpp" #include +#include #include @@ -112,14 +113,18 @@ void FromJSONObject(json_t * root, string const & field, PointD & point) FromJSONObject(root, field.c_str(), point); } -bool FromJSONObjectOptional(json_t * root, char const * field, PointD & point) +void FromJSONObjectOptional(json_t * root, char const * field, boost::optional & point) { json_t * p = base::GetJSONOptionalField(root, field); if (!p || base::JSONIsNull(p)) - return false; + { + point = boost::none; + return; + } - ParsePoint(p, point); - return true; + PointD parsed; + ParsePoint(p, parsed); + point = move(parsed); } void ToJSONObject(json_t & root, char const * field, PointD const & point) @@ -130,13 +135,26 @@ void ToJSONObject(json_t & root, char const * field, PointD const & point) json_object_set_new(&root, field, json.release()); } -bool FromJSONObjectOptional(json_t * root, string const & field, PointD & point) +void FromJSONObjectOptional(json_t * root, string const & field, boost::optional & point) { - return FromJSONObjectOptional(root, field.c_str(), point); + FromJSONObjectOptional(root, field.c_str(), point); } void ToJSONObject(json_t & root, string const & field, PointD const & point) { ToJSONObject(root, field.c_str(), point); } + +void ToJSONObject(json_t & root, char const * field, boost::optional const & point) +{ + if (point) + ToJSONObject(root, field, *point); + else + ToJSONObject(root, field, base::NewJSONNull()); +} + +void ToJSONObject(json_t & root, std::string const & field, boost::optional const & point) +{ + ToJSONObject(root, field.c_str(), point); +} } // namespace m2 diff --git a/search/search_quality/helpers.hpp b/search/search_quality/helpers.hpp index 9fb2707f98..10f493dbac 100644 --- a/search/search_quality/helpers.hpp +++ b/search/search_quality/helpers.hpp @@ -5,6 +5,8 @@ #include #include +#include + #include "3party/jansson/myjansson.hpp" namespace search @@ -25,10 +27,13 @@ void FromJSONObject(json_t * root, std::string const & field, RectD & rect); void ToJSONObject(json_t & root, std::string const & field, RectD const & rect); void FromJSONObject(json_t * root, char const * field, PointD & point); -bool FromJSONObjectOptional(json_t * root, char const * field, PointD & point); +void FromJSONObjectOptional(json_t * root, char const * field, boost::optional & point); void FromJSONObject(json_t * root, std::string const & field, PointD & point); -bool FromJSONObjectOptional(json_t * root, std::string const & field, PointD & point); +void FromJSONObjectOptional(json_t * root, std::string const & field, + boost::optional & point); void ToJSONObject(json_t & root, char const * field, PointD const & point); void ToJSONObject(json_t & root, std::string const & field, PointD const & point); +void ToJSONObject(json_t & root, char const * field, boost::optional const & point); +void ToJSONObject(json_t & root, std::string const & field, boost::optional const & point); } // namespace m2 diff --git a/search/search_quality/sample.cpp b/search/search_quality/sample.cpp index 9a8da3dfd8..c43f4d85e3 100644 --- a/search/search_quality/sample.cpp +++ b/search/search_quality/sample.cpp @@ -11,7 +11,6 @@ #include "base/string_utils.hpp" #include -#include #include #include @@ -118,8 +117,6 @@ bool Sample::operator<(Sample const & rhs) const return m_locale < rhs.m_locale; if (m_pos != rhs.m_pos) return m_pos < rhs.m_pos; - if (m_posAvailable != rhs.m_posAvailable) - return m_posAvailable < rhs.m_posAvailable; if (m_viewport != rhs.m_viewport) return LessRect(m_viewport, rhs.m_viewport); if (!Equal(m_results, rhs.m_results)) @@ -167,9 +164,7 @@ void Sample::DeserializeFromJSONImpl(json_t * root) { FromJSONObject(root, "query", m_query); FromJSONObject(root, "locale", m_locale); - - m_posAvailable = FromJSONObjectOptional(root, "position", m_pos); - + FromJSONObjectOptional(root, "position", m_pos); FromJSONObject(root, "viewport", m_viewport); FromJSONObjectOptional(root, "results", m_results); FromJSONObjectOptional(root, "related_queries", m_relatedQueries); @@ -191,9 +186,7 @@ void Sample::FillSearchParams(search::SearchParams & params) const params.m_inputLocale = m_locale; params.m_viewport = m_viewport; params.m_mode = Mode::Everywhere; - if (m_posAvailable) - params.m_position = m_pos; - + params.m_position = m_pos.value_or(m2::PointD()); params.m_needAddress = true; params.m_suggestsEnabled = false; params.m_needHighlighting = false; @@ -293,8 +286,7 @@ string DebugPrint(Sample const & s) oss << "["; oss << "query: " << DebugPrint(s.m_query) << ", "; oss << "locale: " << s.m_locale << ", "; - oss << "pos: " << DebugPrint(s.m_pos) << ", "; - oss << "posAvailable: " << boolalpha << s.m_posAvailable << ", "; + oss << "pos: " << (s.m_pos ? DebugPrint(*s.m_pos) : "null") << ", "; oss << "viewport: " << DebugPrint(s.m_viewport) << ", "; oss << "results: ["; for (size_t i = 0; i < s.m_results.size(); ++i) diff --git a/search/search_quality/sample.hpp b/search/search_quality/sample.hpp index 757877c64a..342dc7c947 100644 --- a/search/search_quality/sample.hpp +++ b/search/search_quality/sample.hpp @@ -10,6 +10,8 @@ #include #include +#include + class FeatureType; namespace search @@ -58,8 +60,7 @@ struct Sample strings::UniString m_query; std::string m_locale; - m2::PointD m_pos = m2::PointD(0, 0); - bool m_posAvailable = false; + boost::optional m_pos; m2::RectD m_viewport = m2::RectD(0, 0, 0, 0); std::vector m_results; std::vector m_relatedQueries; diff --git a/search/search_quality/search_quality_tests/sample_test.cpp b/search/search_quality/search_quality_tests/sample_test.cpp index c37f87f1d0..fcf41ff2c2 100644 --- a/search/search_quality/search_quality_tests/sample_test.cpp +++ b/search/search_quality/search_quality_tests/sample_test.cpp @@ -29,8 +29,7 @@ void SampleTest::Init() { m_cuba.m_query = strings::MakeUniString("cuba"); m_cuba.m_locale = "en"; - m_cuba.m_pos = {37.618706, 99.53730574302003}; - m_cuba.m_posAvailable = true; + m_cuba.m_pos = m2::PointD{37.618706, 99.53730574302003}; m_cuba.m_viewport = {37.1336, 67.1349, 38.0314, 67.7348}; search::Sample::Result cubaRes; cubaRes.m_name = strings::MakeUniString("Cuba"); @@ -44,8 +43,7 @@ void SampleTest::Init() m_riga.m_query = strings::MakeUniString("riga"); m_riga.m_locale = "en"; - m_riga.m_pos = {37.65376, 98.51110651930014}; - m_riga.m_posAvailable = true; + m_riga.m_pos = m2::PointD{37.65376, 98.51110651930014}; m_riga.m_viewport = {37.5064, 67.0476, 37.7799, 67.304}; search::Sample::Result rigaRes; rigaRes.m_name = strings::MakeUniString("Rīga"); @@ -57,8 +55,7 @@ void SampleTest::Init() m_tula.m_query = strings::MakeUniString("tula"); m_tula.m_locale = "en"; - m_tula.m_pos = {0.0, 0.0}; - m_tula.m_posAvailable = false; + m_tula.m_pos = boost::none; m_tula.m_viewport = {37.5064, 67.0476, 37.7799, 67.304}; } } // namespace @@ -165,7 +162,7 @@ UNIT_CLASS_TEST(SampleTest, Arrays) UNIT_CLASS_TEST(SampleTest, SerDes) { - vector expected = {m_cuba, m_riga}; + vector expected = {m_cuba, m_riga, m_tula}; std::string lines; Sample::SerializeToJSONLines(expected, lines); -- cgit v1.2.3