From d90fbb6c9fe7a1ea3afcdb976f48d4f4316fcde3 Mon Sep 17 00:00:00 2001 From: Vladimir Byko-Ianko Date: Wed, 3 Aug 2016 12:41:42 +0300 Subject: [PATCH] Adding padding at the end of altitude section and review fixes. --- generator/altitude_generator.cpp | 4 ++-- indexer/feature_altitude.hpp | 18 ++++++++++-------- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/generator/altitude_generator.cpp b/generator/altitude_generator.cpp index 4b3d0e7088..d90a6d008f 100644 --- a/generator/altitude_generator.cpp +++ b/generator/altitude_generator.cpp @@ -213,6 +213,7 @@ void BuildRoadAltitudes(string const & mwmPath, AltitudeGetter & altitudeGetter) // Writing altitude info. header.m_altitudesOffset = w.Pos() - startOffset; w.Write(deltas.data(), deltas.size()); + w.WritePaddingByEnd(8); header.m_endOffset = w.Pos() - startOffset; // Rewriting header info. @@ -220,8 +221,7 @@ void BuildRoadAltitudes(string const & mwmPath, AltitudeGetter & altitudeGetter) w.Seek(startOffset); header.Serialize(w); w.Seek(endOffset); - LOG(LINFO, (ALTITUDES_FILE_TAG, "section is ready. The size is", endOffset - startOffset, - "min altitude is", processor.GetMinAltitude())); + LOG(LINFO, (ALTITUDES_FILE_TAG, "section is ready. The size is", header.m_endOffset)); if (processor.HasAltitudeInfo()) LOG(LINFO, ("Min altitude is", processor.GetMinAltitude())); else diff --git a/indexer/feature_altitude.hpp b/indexer/feature_altitude.hpp index 67a10d8cef..8d4071e231 100644 --- a/indexer/feature_altitude.hpp +++ b/indexer/feature_altitude.hpp @@ -1,4 +1,5 @@ #pragma once + #include "coding/bit_streams.hpp" #include "coding/elias_coder.hpp" #include "coding/reader.hpp" @@ -88,13 +89,13 @@ public: BitWriter bits(sink); TAltitude prevAltitude = minAltitude; - for (auto const a : m_altitudes) + for (auto const altitude : m_altitudes) { - CHECK_LESS_OR_EQUAL(minAltitude, a, ("A point altitude is less then min mwm altitude")); - uint32_t const delta = bits::ZigZagEncode(static_cast(a) - + CHECK_LESS_OR_EQUAL(minAltitude, altitude, ("A point altitude is less than min mwm altitude")); + uint32_t const delta = bits::ZigZagEncode(static_cast(altitude) - static_cast(prevAltitude)); coding::DeltaCoder::Encode(bits, delta + 1 /* making it greater than zero */); - prevAltitude = a; + prevAltitude = altitude; } } @@ -109,19 +110,20 @@ public: for (size_t i = 0; i < pointCount; ++i) { - uint32_t const decoded = coding::DeltaCoder::Decode(bits); - if (decoded == 0) + uint32_t const biasedDelta = coding::DeltaCoder::Decode(bits); + if (biasedDelta == 0) { ASSERT(false, ("Decoded altitude delta is zero. Point number in its feature is", i)); m_altitudes.clear(); return false; } - uint32_t const delta = decoded - 1 /* recovering value */; + uint32_t const delta = biasedDelta - 1; m_altitudes[i] = static_cast(bits::ZigZagDecode(delta) + prevAltitude); if (m_altitudes[i] < minAltitude) { - ASSERT(false, ("A point altitude readed from file is less then min mwm altitude. Point number in its feature is", i)); + ASSERT(false, ("A point altitude read from file(", m_altitudes[i], + ") is less than min mwm altitude(", minAltitude, "). Point number in its feature is", i)); m_altitudes.clear(); return false; }