diff options
author | Yury Melnichek <melnichek@gmail.com> | 2011-04-24 05:16:18 +0400 |
---|---|---|
committer | Alex Zolotarev <alex@maps.me> | 2015-09-23 01:16:20 +0300 |
commit | 60e2dcfbae9e9a766dfc24c05fa59b846822d8d2 (patch) | |
tree | 6c3c590729949b0235b7ee5717abbf9dd144518e /indexer/geometry_serialization.hpp | |
parent | 7e4bb0e4fd0800a9edb38d3b4c2e7d6c1abbd12d (diff) |
Pass CodingParams everywhere.
Diffstat (limited to 'indexer/geometry_serialization.hpp')
-rw-r--r-- | indexer/geometry_serialization.hpp | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/indexer/geometry_serialization.hpp b/indexer/geometry_serialization.hpp index 12f5f7156f..d967b4a343 100644 --- a/indexer/geometry_serialization.hpp +++ b/indexer/geometry_serialization.hpp @@ -15,6 +15,8 @@ #include "../base/buffer_vector.hpp" #include "../base/stl_add.hpp" +class FileReader; +class FileWriter; namespace serial { @@ -24,18 +26,34 @@ namespace serial public: // TODO: Factor out? CodingParams(); - CodingParams(int64_t basePointInt64, uint8_t coordBits = 30); + CodingParams(uint8_t coordBits, m2::PointD const & pt); + CodingParams(uint8_t coordBits, uint64_t basePointUint64); m2::PointU GetBasePointPrediction(uint64_t offset) const; // TODO: Factor out. m2::PointU GetBasePoint() const { return m_BasePoint; } // TODO: Factor out. - int64_t GetBasePointInt64() const { return m_BasePointInt64; } + int64_t GetBasePointInt64() const { return static_cast<int64_t>(m_BasePointUint64); } + + uint32_t const GetCoordBits() const { return m_CoordBits; } + + template <typename WriterT> void Save(WriterT & writer) const + { + WriteVarUint(writer, GetCoordBits()); + WriteVarUint(writer, static_cast<uint64_t>(GetBasePointInt64())); + } + + template <typename SourceT> void Load(SourceT & src) + { + uint32_t const coordBits = ReadVarUint<uint32_t>(src); + ASSERT_LESS(coordBits, 32, ()); + uint64_t const basePointUint64 = ReadVarUint<uint64_t>(src); + *this = CodingParams(coordBits, basePointUint64); + } - uint8_t const GetCoordBits() const { return m_CoordBits; } private: - int64_t m_BasePointInt64; + uint64_t m_BasePointUint64; // TODO: Factor out. m2::PointU m_BasePoint; uint8_t m_CoordBits; @@ -48,8 +66,6 @@ namespace serial WriteVarUint(sink, v[i]); } - namespace pts { m2::PointU D2U(m2::PointD const & p); } - /// @name Encode and Decode function types. //@{ typedef void (*EncodeFunT)( geo_coding::InPointsT const &, @@ -177,7 +193,7 @@ namespace serial list<BufferT> m_buffers; public: - TrianglesChainSaver(CodingParams const & params); + explicit TrianglesChainSaver(CodingParams const & params); PointT GetBasePoint() const { return m_base; } PointT GetMaxPoint() const { return m_max; } |