Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/search
diff options
context:
space:
mode:
authorMaxim Pimenov <m@maps.me>2019-03-21 00:17:12 +0300
committerTatiana Yan <tatiana.kondakova@gmail.com>2019-03-21 11:14:37 +0300
commit19c778bc375f5e375aa4c54065fa0aac49383894 (patch)
treec30b245ce62564b8cfd921bfca49aa1ce896d969 /search
parent463856b89fbfb5056d1d830001c25cb2673f1ee9 (diff)
[search] [assessment-tool] Stopped filling unknown positions in samples with zeros.
Diffstat (limited to 'search')
-rw-r--r--search/search_quality/assessment_tool/main_model.cpp6
-rw-r--r--search/search_quality/assessment_tool/main_view.cpp6
-rw-r--r--search/search_quality/assessment_tool/main_view.hpp4
-rw-r--r--search/search_quality/assessment_tool/sample_view.cpp14
-rw-r--r--search/search_quality/assessment_tool/sample_view.hpp7
-rw-r--r--search/search_quality/assessment_tool/view.hpp6
-rw-r--r--search/search_quality/helpers.cpp30
-rw-r--r--search/search_quality/helpers.hpp9
-rw-r--r--search/search_quality/sample.cpp14
-rw-r--r--search/search_quality/sample.hpp5
-rw-r--r--search/search_quality/search_quality_tests/sample_test.cpp11
11 files changed, 64 insertions, 48 deletions
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<m2::PointD> 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<m2::PointD> 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<m2::PointD> const & position, bool hasEdits) override;
void AddFoundResults(search::Results::ConstIter begin, search::Results::ConstIter end) override;
void ShowNonFoundResults(std::vector<search::Sample::Result> 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<m2::PointD> 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 <boost/optional.hpp>
+
#include <QtCore/QMargins>
#include <QtWidgets/QWidget>
@@ -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<m2::PointD> const & position);
void OnSearchStarted();
void OnSearchCompleted();
@@ -89,5 +90,5 @@ private:
QMargins m_rightAreaMargins;
QMargins m_defaultMargins;
- bool m_positionAvailable = false;
+ boost::optional<m2::PointD> 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 <string>
#include <vector>
+#include <boost/optional.hpp>
+
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<m2::PointD> 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 <memory>
+#include <utility>
#include <sys/resource.h>
@@ -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<PointD> & 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<PointD> & 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<PointD> 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<PointD> 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 <cstdint>
#include <string>
+#include <boost/optional.hpp>
+
#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<PointD> & 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<PointD> & 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<PointD> const & point);
+void ToJSONObject(json_t & root, std::string const & field, boost::optional<PointD> 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 <algorithm>
-#include <ios>
#include <memory>
#include <sstream>
@@ -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 <string>
#include <vector>
+#include <boost/optional.hpp>
+
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<m2::PointD> m_pos;
m2::RectD m_viewport = m2::RectD(0, 0, 0, 0);
std::vector<Result> m_results;
std::vector<strings::UniString> 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<Sample> expected = {m_cuba, m_riga};
+ vector<Sample> expected = {m_cuba, m_riga, m_tula};
std::string lines;
Sample::SerializeToJSONLines(expected, lines);