diff options
Diffstat (limited to 'search/rank_table_cache.hpp')
-rw-r--r-- | search/rank_table_cache.hpp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/search/rank_table_cache.hpp b/search/rank_table_cache.hpp new file mode 100644 index 0000000000..2332a3a3c1 --- /dev/null +++ b/search/rank_table_cache.hpp @@ -0,0 +1,46 @@ +#pragma once + +#include "indexer/index.hpp" + +#include "base/macros.hpp" + +#include "std/map.hpp" +#include "std/unique_ptr.hpp" + +namespace search +{ +class RankTable; + +class RankTableCache +{ + using TId = MwmSet::MwmId; + + struct TKey : public MwmSet::MwmHandle + { + TKey() = default; + TKey(TKey &&) = default; + + explicit TKey(TId const & id) { this->m_mwmId = id; } + explicit TKey(MwmSet::MwmHandle && handle) : MwmSet::MwmHandle(move(handle)) {} + }; + +public: + RankTableCache() = default; + + RankTable const & Get(Index & index, TId const & mwmId); + + void Remove(TId const & id); + void Clear(); + +private: + struct Compare + { + bool operator()(TKey const & r1, TKey const & r2) const { return (r1.GetId() < r2.GetId()); } + }; + + map<TKey, unique_ptr<RankTable>, Compare> m_ranks; + + DISALLOW_COPY_AND_MOVE(RankTableCache); +}; + +} // namespace search |