blob: a0e6b6e21b42e53956c32b245ba0671a7401214b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
#include "search/categories_cache.hpp"
#include "search/mwm_context.hpp"
#include "search/query_params.hpp"
#include "search/retrieval.hpp"
#include "indexer/classificator.hpp"
#include "indexer/ftypes_matcher.hpp"
#include "indexer/search_string_utils.hpp"
#include "base/assert.hpp"
#include "base/levenshtein_dfa.hpp"
#include "std/vector.hpp"
namespace search
{
// CategoriesCache ---------------------------------------------------------------------------------
CBV CategoriesCache::Get(MwmContext const & context)
{
if (!context.m_handle.IsAlive() || !context.m_value.HasSearchIndex())
return CBV();
auto id = context.m_handle.GetId();
auto const it = m_cache.find(id);
if (it != m_cache.cend())
return it->second;
auto cbv = Load(context);
m_cache[id] = cbv;
return cbv;
}
CBV CategoriesCache::Load(MwmContext const & context)
{
ASSERT(context.m_handle.IsAlive(), ());
ASSERT(context.m_value.HasSearchIndex(), ());
auto const & c = classif();
SearchTrieRequest<strings::LevenshteinDFA> request;
m_categories.ForEach([&request, &c](uint32_t const type) {
request.m_categories.emplace_back(FeatureTypeToString(c.GetIndexForType(type)));
});
return CBV(RetrieveAddressFeatures(context, m_cancellable, request));
}
// StreetsCache ------------------------------------------------------------------------------------
StreetsCache::StreetsCache(my::Cancellable const & cancellable)
: CategoriesCache(ftypes::IsStreetChecker::Instance(), cancellable)
{
}
// VillagesCache -----------------------------------------------------------------------------------
VillagesCache::VillagesCache(my::Cancellable const & cancellable)
: CategoriesCache(ftypes::IsVillageChecker::Instance(), cancellable)
{
}
// HotelsCache -------------------------------------------------------------------------------------
HotelsCache::HotelsCache(my::Cancellable const & cancellable)
: CategoriesCache(ftypes::IsHotelChecker::Instance(), cancellable)
{
}
} // namespace search
|