MCPcopy Create free account
hub / github.com/comaps/comaps / ReadFeatures

Method ReadFeatures

libs/indexer/data_source.cpp:286–323  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

284}
285
286void DataSource::ReadFeatures(FeatureCallback const & fn, std::vector<FeatureID> const & features) const
287{
288 ASSERT(is_sorted(features.begin(), features.end()), ());
289
290 auto fidIter = features.begin();
291 auto const endIter = features.end();
292 while (fidIter != endIter)
293 {
294 MwmId const & id = fidIter->m_mwmId;
295 MwmHandle const handle = GetMwmHandleById(id);
296 if (handle.IsAlive())
297 {
298 // Prepare features reading.
299 auto src = (*m_factory)(handle);
300 do
301 {
302 auto const fts = src->GetFeatureStatus(fidIter->m_index);
303 ASSERT_NOT_EQUAL(FeatureStatus::Deleted, fts,
304 ("Deleted feature was cached. It should not be here. Please review your code."));
305 std::unique_ptr<FeatureType> ft;
306 if (fts == FeatureStatus::Modified || fts == FeatureStatus::Created)
307 ft = src->GetModifiedFeature(fidIter->m_index);
308 else
309 ft = src->GetOriginalFeature(fidIter->m_index);
310
311 CHECK(ft, ());
312 fn(*ft);
313 }
314 while (++fidIter != endIter && id == fidIter->m_mwmId);
315 }
316 else
317 {
318 // Skip unregistered mwm files.
319 while (++fidIter != endIter && id == fidIter->m_mwmId)
320 ;
321 }
322 }
323}

Callers

nothing calls this directly

Calls 7

ASSERTFunction · 0.85
GetOriginalFeatureMethod · 0.80
beginMethod · 0.45
endMethod · 0.45
IsAliveMethod · 0.45
GetFeatureStatusMethod · 0.45
GetModifiedFeatureMethod · 0.45

Tested by

no test coverage detected