From 655562b2e5acdaa2be4e9691229e155fb5691cd6 Mon Sep 17 00:00:00 2001 From: Yury Melnichek Date: Wed, 28 Sep 2011 13:47:28 +0200 Subject: [PATCH] [search] Clear offsets in viewport cache. --- search/search_query.cpp | 14 ++++++++++++-- search/search_query.hpp | 3 +++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/search/search_query.cpp b/search/search_query.cpp index ee28cf25fe..4b32d096ad 100644 --- a/search/search_query.cpp +++ b/search/search_query.cpp @@ -20,7 +20,7 @@ namespace search Query::Query(Index const * pIndex, search::CategoriesHolder const * pCategories) : m_pIndex(pIndex), m_pCategories(pCategories), m_viewport(m2::RectD::GetEmptyRect()), - m_viewportExtended(m2::RectD::GetEmptyRect()) + m_viewportExtended(m2::RectD::GetEmptyRect()), m_bOffsetsCacheIsValid(false) { } @@ -32,7 +32,7 @@ void Query::SetViewport(m2::RectD const & viewport) { // TODO: Clear m_viewportExtended when mwm index is added or removed! - if (m_viewport != viewport) + if (m_viewport != viewport || !m_bOffsetsCacheIsValid) { m_viewport = viewport; m_viewportExtended = m_viewport; @@ -42,8 +42,16 @@ void Query::SetViewport(m2::RectD const & viewport) } } +void Query::ClearCache() +{ + m_offsetsInViewport.clear(); + m_bOffsetsCacheIsValid = false; +} + void Query::UpdateViewportOffsets() { + m_offsetsInViewport.clear(); + vector mwmInfo; m_pIndex->GetMwmInfo(mwmInfo); m_offsetsInViewport.resize(mwmInfo.size()); @@ -81,6 +89,8 @@ void Query::UpdateViewportOffsets() } } + m_bOffsetsCacheIsValid = true; + size_t offsetsCached = 0; for (MwmSet::MwmId mwmId = 0; mwmId < mwmInfo.size(); ++mwmId) offsetsCached += m_offsetsInViewport[mwmId].size(); diff --git a/search/search_query.hpp b/search/search_query.hpp index 4ce04cce59..88a17c0b66 100644 --- a/search/search_query.hpp +++ b/search/search_query.hpp @@ -30,6 +30,8 @@ public: function const & f, unsigned int resultsNeeded = 10); + void ClearCache(); + private: friend class impl::FeatureLoader; @@ -54,6 +56,7 @@ private: scoped_ptr m_pKeywordMatcher; + bool m_bOffsetsCacheIsValid; vector > m_offsetsInViewport; my::limited_priority_queue m_results;