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
diff options
context:
space:
mode:
authorYuri Gorshenin <y@maps.me>2017-10-27 15:49:44 +0300
committerVladimir Byko-Ianko <bykoianko@gmail.com>2017-10-30 14:19:26 +0300
commiteda43f183782407038d2dc07a0f4a13be607daf3 (patch)
treeb7f9ff7b1b389c92ea51fd1d6455940261226146
parenta6ccd8ba2e564a87144f58f8a04688b451024846 (diff)
[search] Removed multiple viewports.
-rw-r--r--search/processor.cpp96
-rw-r--r--search/processor.hpp26
-rw-r--r--search/search_integration_tests/helpers.cpp6
3 files changed, 35 insertions, 93 deletions
diff --git a/search/processor.cpp b/search/processor.cpp
index bc88cea171..0e2e2c3ba8 100644
--- a/search/processor.cpp
+++ b/search/processor.cpp
@@ -210,9 +210,20 @@ void Processor::Init(bool viewportSearch)
m_preRanker.SetViewportSearch(viewportSearch);
}
-void Processor::SetViewport(m2::RectD const & viewport, bool forceUpdate)
+void Processor::SetViewport(m2::RectD const & viewport)
{
- SetViewportByIndex(viewport, CURRENT_V, forceUpdate);
+ ASSERT(viewport.IsValid(), ());
+
+ if (m_viewport.IsValid())
+ {
+ double constexpr epsMeters = 10.0;
+
+ // Skip if viewports are equal.
+ if (IsEqualMercator(m_viewport, viewport, epsMeters))
+ return;
+ }
+
+ m_viewport = viewport;
}
void Processor::SetPreferredLocale(string const & locale)
@@ -336,7 +347,7 @@ m2::PointD Processor::GetPivotPoint() const
{
bool const viewportSearch = m_mode == Mode::Viewport;
- m2::RectD const & viewport = m_viewport[CURRENT_V];
+ auto const & viewport = GetViewport();
if (viewportSearch || !viewport.IsPointInside(GetPosition()))
return viewport.Center();
return GetPosition();
@@ -344,54 +355,18 @@ m2::PointD Processor::GetPivotPoint() const
m2::RectD Processor::GetPivotRect() const
{
- m2::RectD const & viewport = m_viewport[CURRENT_V];
+ auto const & viewport = GetViewport();
if (viewport.IsPointInside(GetPosition()))
return GetRectAroundPosition(GetPosition());
return NormalizeViewport(viewport);
}
-void Processor::SetViewportByIndex(m2::RectD const & viewport, size_t idx, bool forceUpdate)
+m2::RectD const & Processor::GetViewport() const
{
- ASSERT(idx < COUNT_V, (idx));
-
- if (viewport.IsValid())
- {
- // Check if we can skip this cache query.
- if (m_viewport[idx].IsValid())
- {
- // Threshold to compare for equal or inner rects.
- // It doesn't influence on result cached features because it's smaller
- // than minimal cell size in geometry index (i'm almost sure :)).
- double constexpr epsMeters = 10.0;
-
- if (forceUpdate)
- {
- // skip if rects are equal
- if (IsEqualMercator(m_viewport[idx], viewport, epsMeters))
- return;
- }
- else
- {
- // skip if the new viewport is inside the old one (no need to recache)
- m2::RectD r(m_viewport[idx]);
- double constexpr eps = epsMeters * MercatorBounds::degreeInMetres;
- r.Inflate(eps, eps);
-
- if (r.IsRectInside(viewport))
- return;
- }
- }
-
- m_viewport[idx] = viewport;
- }
- else
- {
- ClearCache(idx);
- }
+ ASSERT(m_viewport.IsValid(), ());
+ return m_viewport;
}
-void Processor::ClearCache(size_t ind) { m_viewport[ind].MakeEmpty(); }
-
void Processor::LoadCitiesBoundaries()
{
if (m_citiesBoundaries.Load())
@@ -450,6 +425,8 @@ void Processor::Search(SearchParams const & params)
bool rankPivotIsSet = false;
auto const & viewport = params.m_viewport;
+ ASSERT(viewport.IsValid(), ());
+
if (!viewportSearch && params.IsValidPosition())
{
m2::PointD const pos = params.GetPositionMercator();
@@ -476,7 +453,7 @@ void Processor::Search(SearchParams const & params)
SetInputLocale(params.m_inputLocale);
SetQuery(params.m_query);
- SetViewport(viewport, true /* forceUpdate */);
+ SetViewport(viewport);
SetOnResults(params.m_onResults);
Geocoder::Params geocoderParams;
@@ -576,7 +553,7 @@ void Processor::InitGeocoder(Geocoder::Params & params)
InitParams(params);
params.m_mode = m_mode;
if (viewportSearch)
- params.m_pivot = m_viewport[CURRENT_V];
+ params.m_pivot = GetViewport();
else
params.m_pivot = GetPivotRect();
params.m_hotelsFilter = m_hotelsFilter;
@@ -638,37 +615,10 @@ void Processor::InitEmitter() { m_emitter.Init(m_onResults); }
void Processor::ClearCaches()
{
- for (size_t i = 0; i < COUNT_V; ++i)
- ClearCache(i);
-
m_geocoder.ClearCaches();
m_villagesCache.Clear();
m_preRanker.ClearCaches();
m_ranker.ClearCaches();
-}
-
-m2::RectD const & Processor::GetViewport(ViewportID vID /*= DEFAULT_V*/) const
-{
- if (vID == LOCALITY_V)
- {
- // special case for search address - return viewport around location
- return m_viewport[vID];
- }
-
- ASSERT(m_viewport[CURRENT_V].IsValid(), ());
- return m_viewport[CURRENT_V];
-}
-
-string DebugPrint(Processor::ViewportID viewportId)
-{
- switch (viewportId)
- {
- case Processor::DEFAULT_V: return "Default";
- case Processor::CURRENT_V: return "Current";
- case Processor::LOCALITY_V: return "Locality";
- case Processor::COUNT_V: return "Count";
- }
- ASSERT(false, ("Unknown viewportId"));
- return "Unknown";
+ m_viewport.MakeEmpty();
}
} // namespace search
diff --git a/search/processor.hpp b/search/processor.hpp
index 6cede1db1a..22679c86f9 100644
--- a/search/processor.hpp
+++ b/search/processor.hpp
@@ -68,9 +68,7 @@ public:
void Init(bool viewportSearch);
- /// @param[in] forceUpdate Pass true (default) to recache feature's ids even
- /// if viewport is a part of the old cached rect.
- void SetViewport(m2::RectD const & viewport, bool forceUpdate);
+ void SetViewport(m2::RectD const & viewport);
void SetPreferredLocale(string const & locale);
void SetInputLocale(string const & locale);
void SetQuery(string const & query);
@@ -88,9 +86,11 @@ public:
inline m2::PointD const & GetPosition() const { return m_position; }
/// Suggestions language code, not the same as we use in mwm data
- int8_t m_inputLocaleCode, m_currentLocaleCode;
+ int8_t m_inputLocaleCode;
+ int8_t m_currentLocaleCode;
inline bool IsEmptyQuery() const { return (m_prefix.empty() && m_tokens.empty()); }
+
void Search(SearchParams const & params);
// Tries to generate a (lat, lon) result from |m_query|.
@@ -107,16 +107,6 @@ public:
void LoadCitiesBoundaries();
protected:
- enum ViewportID
- {
- DEFAULT_V = -1,
- CURRENT_V = 0,
- LOCALITY_V = 1,
- COUNT_V = 2 // Should always be the last
- };
-
- friend string DebugPrint(ViewportID viewportId);
-
using TMWMVector = vector<shared_ptr<MwmInfo>>;
using TOffsetsVector = map<MwmSet::MwmId, vector<uint32_t>>;
using TFHeader = feature::DataHeader;
@@ -132,11 +122,7 @@ protected:
m2::PointD GetPivotPoint() const;
m2::RectD GetPivotRect() const;
- void SetViewportByIndex(m2::RectD const & viewport, size_t idx, bool forceUpdate);
- void ClearCache(size_t ind);
-
- // Returns a Rect for viewport-distance calculations.
- m2::RectD const & GetViewport(ViewportID vID = DEFAULT_V) const;
+ m2::RectD const & GetViewport() const;
void SetLanguage(int id, int8_t lang);
int8_t GetLanguage(int id) const;
@@ -150,7 +136,7 @@ protected:
strings::UniString m_prefix;
set<uint32_t> m_preferredTypes;
- m2::RectD m_viewport[COUNT_V];
+ m2::RectD m_viewport;
m2::PointD m_pivot;
m2::PointD m_position;
double m_minDistanceOnMapBetweenResults;
diff --git a/search/search_integration_tests/helpers.cpp b/search/search_integration_tests/helpers.cpp
index d61f7c966e..dae5558a10 100644
--- a/search/search_integration_tests/helpers.cpp
+++ b/search/search_integration_tests/helpers.cpp
@@ -12,6 +12,9 @@
#include "platform/platform.hpp"
+#include "geometry/mercator.hpp"
+#include "geometry/rect2d.hpp"
+
namespace search
{
// TestWithClassificator ---------------------------------------------------------------------------
@@ -29,6 +32,9 @@ SearchTest::SearchTest()
Engine::Params())
{
indexer::tests_support::SetUpEditorForTesting(make_unique<EditorDelegate>(m_engine));
+
+ SetViewport(m2::RectD(MercatorBounds::minX, MercatorBounds::minY,
+ MercatorBounds::maxX, MercatorBounds::maxY));
}
SearchTest::~SearchTest()