diff --git a/generator/transit_generator.cpp b/generator/transit_generator.cpp index 61a501ab1a..ac79195a59 100644 --- a/generator/transit_generator.cpp +++ b/generator/transit_generator.cpp @@ -49,6 +49,7 @@ void SerializeObject(my::Json const & root, string const & key, Serializer @@ -79,8 +81,12 @@ public: t.Visit(*this); } + /// \note This method should be called beforw serializing every table. + void ResetCache() { m_lastEncodedPoint = m2::PointD(); } + private: Sink & m_sink; + m2::PointU m_lastEncodedPoint; }; template @@ -110,10 +116,9 @@ public: void operator()(m2::PointD & p, char const * /* name */ = nullptr) { - m2::PointU pointU; - pointU.x = ReadVarUint(m_source); - pointU.y = ReadVarUint(m_source); + m2::PointU pointU = DecodeDelta(ReadVarUint(m_source), m_lastDecodedPoint); p = PointU2PointD(pointU, POINT_COORD_BITS); + m_lastDecodedPoint = pointU; } template @@ -131,8 +136,12 @@ public: t.Visit(*this); } + /// \note This method should be called beforw deserializing every table. + void ResetCache() { m_lastDecodedPoint = m2::PointD(); } + private: Source & m_source; + m2::PointU m_lastDecodedPoint; }; } // namespace transit } // namespace routing