[search] Clear offsets in viewport cache.

This commit is contained in:
Yury Melnichek 2011-09-28 13:47:28 +02:00 committed by Alex Zolotarev
parent 28d304204d
commit 655562b2e5
2 changed files with 15 additions and 2 deletions

View file

@ -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> 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();

View file

@ -30,6 +30,8 @@ public:
function<void (Result const &)> const & f,
unsigned int resultsNeeded = 10);
void ClearCache();
private:
friend class impl::FeatureLoader;
@ -54,6 +56,7 @@ private:
scoped_ptr<KeywordMatcher> m_pKeywordMatcher;
bool m_bOffsetsCacheIsValid;
vector<unordered_set<uint32_t> > m_offsetsInViewport;
my::limited_priority_queue<impl::IntermediateResult> m_results;