diff options
author | Vladimir Byko-Ianko <v.bykoianko@corp.mail.ru> | 2016-07-21 09:29:18 +0300 |
---|---|---|
committer | Vladimir Byko-Ianko <v.bykoianko@corp.mail.ru> | 2016-07-23 10:25:12 +0300 |
commit | 1f06ea2f68c68f80464142ee66d89a56de8ec900 (patch) | |
tree | fd36718baa8f20eff54386bb1e9ba4820ecdfe3b /indexer/altitude_loader.cpp | |
parent | 6ab081563cc1c3365837a85e9e3bd723088fa9b3 (diff) |
Correct working altitude_loader in case of absence altitude section in mwm.
Diffstat (limited to 'indexer/altitude_loader.cpp')
-rw-r--r-- | indexer/altitude_loader.cpp | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/indexer/altitude_loader.cpp b/indexer/altitude_loader.cpp index 5d539f5110..b39b983e51 100644 --- a/indexer/altitude_loader.cpp +++ b/indexer/altitude_loader.cpp @@ -30,14 +30,18 @@ void ReadBuffer(ReaderSource<FilesContainerR::TReader> & rs, vector<char> & buf) namespace feature { AltitudeLoader::AltitudeLoader(MwmValue const * mwmValue) - : reader(mwmValue->m_cont.GetReader(ALTITUDES_FILE_TAG)), m_altitudeInfoOffset(0), m_minAltitude(kInvalidAltitude) + : m_altitudeInfoOffset(0), m_minAltitude(kInvalidAltitude) { if (!mwmValue || mwmValue->GetHeader().GetFormat() < version::Format::v8 ) return; + if (!mwmValue->m_cont.IsExist(ALTITUDES_FILE_TAG)) + return; + try { - ReaderSource<FilesContainerR::TReader> rs(reader); + m_reader = make_unique<FilesContainerR::TReader>(mwmValue->m_cont.GetReader(ALTITUDES_FILE_TAG)); + ReaderSource<FilesContainerR::TReader> rs(*m_reader); DeserializeHeader(rs); // Reading rs_bit_vector with altitude availability information. @@ -86,15 +90,15 @@ TAltitudes AltitudeLoader::GetAltitude(uint32_t featureId, size_t pointCount) co uint64_t const r = m_altitudeAvailability->rank(featureId); CHECK_LESS(r, m_altitudeAvailability->size(), (featureId)); uint64_t const offset = m_featureTable->select(r); - CHECK_LESS(offset, m_featureTable->size(), (featureId)); + CHECK_LESS_OR_EQUAL(offset, m_featureTable->size(), (featureId)); uint64_t const m_altitudeInfoOffsetInSection = m_altitudeInfoOffset + offset; - CHECK_LESS(m_altitudeInfoOffsetInSection, reader.Size(), ()); + CHECK_LESS(m_altitudeInfoOffsetInSection, m_reader->Size(), ()); try { Altitude a; - ReaderSource<FilesContainerR::TReader> rs(reader); + ReaderSource<FilesContainerR::TReader> rs(*m_reader); rs.Skip(m_altitudeInfoOffsetInSection); a.Deserialize(m_minAltitude, pointCount, rs); |