diff options
author | vng <viktor.govako@gmail.com> | 2011-08-23 18:49:31 +0400 |
---|---|---|
committer | Alex Zolotarev <alex@maps.me> | 2015-09-23 01:22:20 +0300 |
commit | b9df96e89b57666178aada45c4c25eece8f8d756 (patch) | |
tree | 3c92c630bbe427e6bda7f91b2567ff4534810c6b /indexer/coding_params.hpp | |
parent | 2046a47d565e7f3c9a1a18eaec7d969f9bf20789 (diff) |
Factor out 'CodingParams' to separate module.
Diffstat (limited to 'indexer/coding_params.hpp')
-rw-r--r-- | indexer/coding_params.hpp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/indexer/coding_params.hpp b/indexer/coding_params.hpp new file mode 100644 index 0000000000..6f0264cf03 --- /dev/null +++ b/indexer/coding_params.hpp @@ -0,0 +1,46 @@ +#pragma once +#include "../geometry/point2d.hpp" + +#include "../coding/varint.hpp" + + +namespace serial +{ + class CodingParams + { + public: + // TODO: Factor out? + CodingParams(); + 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 static_cast<int64_t>(m_BasePointUint64); } + + uint32_t 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); + } + + private: + uint64_t m_BasePointUint64; + // TODO: Factor out. + m2::PointU m_BasePoint; + uint8_t m_CoordBits; + }; +} |