#pragma once #include "search/feature_offset_match.hpp" #include "search/query_params.hpp" #include "platform/mwm_traits.hpp" #include "coding/reader.hpp" #include "geometry/rect2d.hpp" #include "base/cancellable.hpp" #include "base/dfa_helpers.hpp" #include "base/levenshtein_dfa.hpp" #include class MwmValue; namespace coding { class CompressedBitVector; } namespace search { class MwmContext; class TokenSlice; class Retrieval { public: template using TrieRoot = trie::Iterator>; Retrieval(MwmContext const & context, base::Cancellable const & cancellable); // Following functions retrieve from the search index corresponding to // |value| all features matching to |request|. std::unique_ptr RetrieveAddressFeatures( SearchTrieRequest const & request) const; std::unique_ptr RetrieveAddressFeatures( SearchTrieRequest> const & request) const; std::unique_ptr RetrieveAddressFeatures( SearchTrieRequest const & request) const; std::unique_ptr RetrieveAddressFeatures( SearchTrieRequest> const & request) const; // Retrieves from the search index corresponding to |value| all // postcodes matching to |slice|. std::unique_ptr RetrievePostcodeFeatures(TokenSlice const & slice) const; // Retrieves from the geometry index corresponding to |value| all features belonging to |rect|. std::unique_ptr RetrieveGeometryFeatures(m2::RectD const & rect, int scale) const; private: template