bool SingleMwmRouter::LoadIndex(MwmSet::MwmId const & mwmId, string const & country, IndexGraph & graph) { MwmSet::MwmHandle mwmHandle = m_index.GetMwmHandleById(mwmId); if (!mwmHandle.IsAlive()) return false; MwmValue const * mwmValue = mwmHandle.GetValue<MwmValue>(); try { my::Timer timer; FilesContainerR::TReader reader(mwmValue->m_cont.GetReader(ROUTING_FILE_TAG)); ReaderSource<FilesContainerR::TReader> src(reader); IndexGraphSerializer::Deserialize(graph, src, kCarMask); LOG(LINFO, (ROUTING_FILE_TAG, "section for", country, "loaded in", timer.ElapsedSeconds(), "seconds")); return true; } catch (Reader::OpenException const & e) { LOG(LERROR, ("File", mwmValue->GetCountryFileName(), "Error while reading", ROUTING_FILE_TAG, "section:", e.Msg())); return false; } }
CrossMwmGraph::MwmStatus CrossMwmGraph::GetMwmStatus(NumMwmId numMwmId, string const & sectionName) const { MwmSet::MwmHandle handle = m_dataSource.GetMwmHandleByCountryFile(m_numMwmIds->GetFile(numMwmId)); if (!handle.IsAlive()) return MwmStatus::NotLoaded; MwmValue * value = handle.GetValue<MwmValue>(); CHECK(value != nullptr, ("Country file:", m_numMwmIds->GetFile(numMwmId))); return value->m_cont.IsExist(sectionName) ? MwmStatus::SectionExists : MwmStatus::NoSection; }
void PreRanker::FillMissingFieldsInPreResults() { MwmSet::MwmId mwmId; MwmSet::MwmHandle mwmHandle; unique_ptr<RankTable> ranks = make_unique<DummyRankTable>(); unique_ptr<RankTable> popularityRanks = make_unique<DummyRankTable>(); unique_ptr<LazyCentersTable> centers; bool pivotFeaturesInitialized = false; ForEach([&](PreRankerResult & r) { FeatureID const & id = r.GetId(); PreRankingInfo & info = r.GetInfo(); if (id.m_mwmId != mwmId) { mwmId = id.m_mwmId; mwmHandle = m_dataSource.GetMwmHandleById(mwmId); ranks.reset(); centers.reset(); if (mwmHandle.IsAlive()) { ranks = RankTable::Load(mwmHandle.GetValue<MwmValue>()->m_cont, SEARCH_RANKS_FILE_TAG); popularityRanks = RankTable::Load(mwmHandle.GetValue<MwmValue>()->m_cont, POPULARITY_RANKS_FILE_TAG); centers = make_unique<LazyCentersTable>(*mwmHandle.GetValue<MwmValue>()); } if (!ranks) ranks = make_unique<DummyRankTable>(); if (!popularityRanks) popularityRanks = make_unique<DummyRankTable>(); } info.m_rank = ranks->Get(id.m_index); info.m_popularity = popularityRanks->Get(id.m_index); m2::PointD center; if (centers && centers->Get(id.m_index, center)) { info.m_distanceToPivot = MercatorBounds::DistanceOnEarth(m_params.m_accuratePivotCenter, center); info.m_center = center; info.m_centerLoaded = true; } else { if (!pivotFeaturesInitialized) { m_pivotFeatures.SetPosition(m_params.m_accuratePivotCenter, m_params.m_scale); pivotFeaturesInitialized = true; } info.m_distanceToPivot = m_pivotFeatures.GetDistanceToFeatureMeters(id); } }); }