| 284 | } |
| 285 | |
| 286 | void 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 | } |
nothing calls this directly
no test coverage detected