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:
authorvng <viktor.govako@gmail.com>2012-10-17 22:12:12 +0400
committerAlex Zolotarev <alex@maps.me>2015-09-23 01:45:43 +0300
commit8e2ea1ef5a7df220e206cf6115e8525dee8fb339 (patch)
tree87822d355bea8873c41ae7b703269370c3b42cbc /search
parentde85bf8cc46178dd8d3232551949b0a33130417c (diff)
Clear search cache (features in viewports) when new country is downloaded.
Diffstat (limited to 'search')
-rw-r--r--search/search_engine.cpp7
-rw-r--r--search/search_engine.hpp1
-rw-r--r--search/search_query.cpp7
-rw-r--r--search/search_query.hpp2
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; }