diff options
author | Vladimir Byko-Ianko <v.bykoianko@corp.mail.ru> | 2016-07-26 18:50:47 +0300 |
---|---|---|
committer | Vladimir Byko-Ianko <v.bykoianko@corp.mail.ru> | 2016-07-26 18:51:58 +0300 |
commit | 6840c3c18ce58e7b0021745b46bf864468b189cd (patch) | |
tree | 69173b9d6ad693565fd249fca0e813a8f50fe7ec /indexer/altitude_loader.cpp | |
parent | 149365fe1bac4dcbb02bed49f00c06d325c3d783 (diff) |
Setting valid altitude for all Junctions.
Diffstat (limited to 'indexer/altitude_loader.cpp')
-rw-r--r-- | indexer/altitude_loader.cpp | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/indexer/altitude_loader.cpp b/indexer/altitude_loader.cpp index 7109338fcf..7624ae2d33 100644 --- a/indexer/altitude_loader.cpp +++ b/indexer/altitude_loader.cpp @@ -53,12 +53,13 @@ AltitudeLoader::AltitudeLoader(MwmValue const & mwmValue) } bool AltitudeLoader::HasAltitudes() const { return m_header.m_minAltitude != kInvalidAltitude; } + TAltitudes const & AltitudeLoader::GetAltitudes(uint32_t featureId, size_t pointCount) { if (!HasAltitudes()) { // The version of mwm is less than version::Format::v8 or there's no altitude section in mwm. - return m_dummy; + return m_cache.insert(make_pair(featureId, TAltitudes(pointCount, kDefautlAltitudeMeters))).first->second; } auto const it = m_cache.find(featureId); @@ -68,7 +69,7 @@ TAltitudes const & AltitudeLoader::GetAltitudes(uint32_t featureId, size_t point if (!m_altitudeAvailability[featureId]) { LOG(LINFO, ("Feature featureId =", featureId, "does not contain any altitude information.")); - return m_cache.insert(make_pair(featureId, m_dummy)).first->second; + return m_cache.insert(make_pair(featureId, TAltitudes(pointCount, m_header.m_minAltitude))).first->second; } uint64_t const r = m_altitudeAvailability.rank(featureId); @@ -81,17 +82,26 @@ TAltitudes const & AltitudeLoader::GetAltitudes(uint32_t featureId, size_t point try { - Altitudes a; + Altitudes altitudes; ReaderSource<FilesContainerR::TReader> src(*m_reader); src.Skip(altitudeInfoOffsetInSection); - a.Deserialize(m_header.m_minAltitude, pointCount, src); - - return m_cache.insert(make_pair(featureId, a.GetAltitudes())).first->second; + altitudes.Deserialize(m_header.m_minAltitude, pointCount, src); + + TAltitudes pntAlt = altitudes.GetAltitudes(); + bool const isResultValid = none_of(pntAlt.begin(), pntAlt.end(), + [](TAltitude a) { return a == kInvalidAltitude; }); + if (!isResultValid) + { + ASSERT(false, (pntAlt)); + return m_cache.insert(make_pair(featureId, TAltitudes(pointCount, m_header.m_minAltitude))).first->second; + } + + return m_cache.insert(make_pair(featureId, move(pntAlt))).first->second; } catch (Reader::OpenException const & e) { LOG(LERROR, ("Error while getting altitude data", e.Msg())); - return m_cache.insert(make_pair(featureId, m_dummy)).first->second; + return m_cache.insert(make_pair(featureId, TAltitudes(pointCount, m_header.m_minAltitude))).first->second; } } } // namespace feature |