| 250 | |
| 251 | template <typename Value, typename DFA> |
| 252 | Retrieval::ExtendedFeatures RetrieveAddressFeaturesImpl(Retrieval::TrieRoot<Value> const & root, |
| 253 | MwmContext const & context, |
| 254 | base::Cancellable const & cancellable, |
| 255 | SearchTrieRequest<DFA> const & request) |
| 256 | { |
| 257 | EditedFeaturesHolder holder(context.GetId()); |
| 258 | vector<uint64_t> features; |
| 259 | vector<uint64_t> exactlyMatchedFeatures; |
| 260 | FeaturesCollector collector(cancellable, features, exactlyMatchedFeatures); |
| 261 | |
| 262 | MatchFeaturesInTrie(request, root, [&holder](Value const & value) |
| 263 | { return !holder.ModifiedOrDeleted(base::asserted_cast<uint32_t>(value.m_featureId)); } /* filter */, collector); |
| 264 | |
| 265 | holder.ForEachModifiedOrCreated([&](EditableMapObject const & emo, uint64_t index) |
| 266 | { |
| 267 | auto const matched = MatchFeatureByNameAndType(emo, request); |
| 268 | if (matched.first) |
| 269 | { |
| 270 | features.emplace_back(index); |
| 271 | if (matched.second) |
| 272 | exactlyMatchedFeatures.emplace_back(index); |
| 273 | } |
| 274 | }); |
| 275 | |
| 276 | return SortFeaturesAndBuildResult(std::move(features), std::move(exactlyMatchedFeatures)); |
| 277 | } |
| 278 | |
| 279 | template <typename Value> |
| 280 | Retrieval::ExtendedFeatures RetrievePostcodeFeaturesImpl(Retrieval::TrieRoot<Value> const & root, |
nothing calls this directly
no test coverage detected