diff options
Diffstat (limited to 'search/rank_table_cache.cpp')
-rw-r--r-- | search/rank_table_cache.cpp | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/search/rank_table_cache.cpp b/search/rank_table_cache.cpp new file mode 100644 index 0000000000..83b94f9b94 --- /dev/null +++ b/search/rank_table_cache.cpp @@ -0,0 +1,27 @@ +#include "search/rank_table_cache.hpp" + +#include "search/dummy_rank_table.hpp" + +#include "indexer/rank_table.hpp" + +namespace search +{ +RankTable const & RankTableCache::Get(Index & index, TId const & mwmId) +{ + auto const it = m_ranks.find(TKey(mwmId)); + if (it != m_ranks.end()) + return *it->second; + + TKey handle(index.GetMwmHandleById(mwmId)); + auto table = RankTable::Load(handle.GetValue<MwmValue>()->m_cont); + if (!table) + table.reset(new DummyRankTable()); + + return *(m_ranks.emplace(move(handle), move(table)).first->second.get()); +} + +void RankTableCache::Remove(TId const & id) { m_ranks.erase(TKey(id)); } + +void RankTableCache::Clear() { m_ranks.clear(); } + +} // namespace search |