diff --git a/map/framework.cpp b/map/framework.cpp index 6708507ca5..9f23c09784 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -597,7 +597,7 @@ void Framework::Search(string const & text, SearchCallbackT callback) string buffer; ReaderT(GetPlatform().GetReader(SEARCH_CATEGORIES_FILE_NAME)).ReadAsString(buffer); holder.LoadFromStream(buffer); - m_pSearchEngine.reset(new search::Engine(&m_model.GetIndex(), holder)); + m_pSearchEngine.reset(new search::Engine(&m_model.GetIndex(), holder, NULL)); } m_pSearchEngine->Search(text, m_navigator.Screen().GlobalRect(), callback); diff --git a/search/engine.cpp b/search/engine.cpp index fea7965aa4..c658009ec4 100644 --- a/search/engine.cpp +++ b/search/engine.cpp @@ -13,8 +13,10 @@ namespace search { -Engine::Engine(IndexType const * pIndex, CategoriesHolder & categories) - : m_pIndex(pIndex), m_pCategories(new CategoriesHolder()), +Engine::Engine(IndexType const * pIndex, + CategoriesHolder & categories, + TrieIterator const * pTrieIterator) + : m_pIndex(pIndex), m_pTrieIterator(pTrieIterator), m_pCategories(new CategoriesHolder()), m_pRunner(new threads::ConcurrentRunner), m_pLastQuery(NULL), m_queriesActive(0) { diff --git a/search/engine.hpp b/search/engine.hpp index 2f0b1543ec..471913adeb 100644 --- a/search/engine.hpp +++ b/search/engine.hpp @@ -1,4 +1,6 @@ #pragma once +#include "search_trie.hpp" + #include "../indexer/index.hpp" #include "../geometry/rect2d.hpp" @@ -28,8 +30,10 @@ class Engine public: typedef Index::Type IndexType; - /// Doesn't take ownership of @pIndex. Modifies @categories. - Engine(IndexType const * pIndex, CategoriesHolder & categories); + /// Doesn't take ownership of @pIndex and @pTrieIterator. Modifies @categories. + Engine(IndexType const * pIndex, + CategoriesHolder & categories, + TrieIterator const * pTrieIterator); ~Engine(); void Search(string const & query, @@ -42,6 +46,7 @@ public: private: IndexType const * m_pIndex; + TrieIterator const * m_pTrieIterator; scoped_ptr m_pCategories; scoped_ptr m_pRunner; threads::Mutex m_mutex; diff --git a/search/search.pro b/search/search.pro index 6952cdd537..402785dddb 100644 --- a/search/search.pro +++ b/search/search.pro @@ -19,6 +19,7 @@ HEADERS += \ string_match.hpp \ latlon_match.hpp \ categories_holder.hpp \ + search_trie.hpp SOURCES += \ delimiters.cpp \ diff --git a/search/search_trie.hpp b/search/search_trie.hpp new file mode 100644 index 0000000000..2c0c4c49ed --- /dev/null +++ b/search/search_trie.hpp @@ -0,0 +1,42 @@ +#pragma once + +#include "../coding/trie.hpp" +#include "../base/base.hpp" + +namespace search +{ +namespace trie +{ + +struct ValueReader +{ + struct ValueType + { + uint32_t m_FeatureId; + uint8_t m_Rank; + }; + + template void operator() (SourceT & src, ValueType & value) const + { + src.Read(&value, 5); + } +}; + +struct EdgeValueReader +{ + struct ValueType + { + uint8_t m_Rank; + }; + + template void operator() (SourceT & src, ValueType & value) const + { + src.Read(&value.m_Rank, 1); + } +}; + +} // namespace search::trie + +typedef ::trie::Iterator TrieIterator; + +} // namespace search