diff options
author | vng <viktor.govako@gmail.com> | 2012-10-17 22:12:12 +0400 |
---|---|---|
committer | Alex Zolotarev <alex@maps.me> | 2015-09-23 01:45:43 +0300 |
commit | 8e2ea1ef5a7df220e206cf6115e8525dee8fb339 (patch) | |
tree | 87822d355bea8873c41ae7b703269370c3b42cbc /search | |
parent | de85bf8cc46178dd8d3232551949b0a33130417c (diff) |
Clear search cache (features in viewports) when new country is downloaded.
Diffstat (limited to 'search')
-rw-r--r-- | search/search_engine.cpp | 7 | ||||
-rw-r--r-- | search/search_engine.hpp | 1 | ||||
-rw-r--r-- | search/search_query.cpp | 7 | ||||
-rw-r--r-- | search/search_query.hpp | 2 |
4 files changed, 14 insertions, 3 deletions
diff --git a/search/search_engine.cpp b/search/search_engine.cpp index 4f4ef29504..33ebc572bb 100644 --- a/search/search_engine.cpp +++ b/search/search_engine.cpp @@ -339,6 +339,13 @@ int8_t Engine::GetCurrentLanguage() const return m_pQuery->GetPrefferedLanguage(); } +void Engine::ClearViewportsCache() +{ + threads::MutexGuard guard(m_searchMutex); + + m_pQuery->ClearCaches(); +} + void Engine::ClearCaches() { /// @todo Add m_pData->m_infoGetter clearing routine. diff --git a/search/search_engine.hpp b/search/search_engine.hpp index 7bfaea42bf..380aee2965 100644 --- a/search/search_engine.hpp +++ b/search/search_engine.hpp @@ -55,6 +55,7 @@ public: m2::RectD GetCountryBounds(string const & file) const; + void ClearViewportsCache(); void ClearCaches(); private: diff --git a/search/search_query.cpp b/search/search_query.cpp index d7982d6ece..52c7ab8de9 100644 --- a/search/search_query.cpp +++ b/search/search_query.cpp @@ -182,7 +182,7 @@ int8_t Query::GetPrefferedLanguage() const return GetLanguage(LANG_CURRENT); } -void Query::ClearCache() +void Query::ClearCaches() { for (size_t i = 0; i < RECTSCOUNT; ++i) ClearCache(i); @@ -190,7 +190,10 @@ void Query::ClearCache() void Query::ClearCache(size_t ind) { - m_offsetsInViewport[ind].clear(); + // clear cache and free memory + OffsetsVectorT emptyV; + emptyV.swap(m_offsetsInViewport[ind]); + m_viewport[ind].MakeEmpty(); } diff --git a/search/search_query.hpp b/search/search_query.hpp index aff43c6337..d7b49a8bd4 100644 --- a/search/search_query.hpp +++ b/search/search_query.hpp @@ -79,7 +79,7 @@ public: void SearchAllInViewport(m2::RectD const & viewport, Results & res, unsigned int resultsNeeded = 30); void SearchAdditional(Results & res); - void ClearCache(); + void ClearCaches(); inline void DoCancel() { m_cancel = true; } inline bool IsCanceled() const { return m_cancel; } |