diff options
author | vng <viktor.govako@gmail.com> | 2011-01-18 22:16:56 +0300 |
---|---|---|
committer | Alex Zolotarev <alex@maps.me> | 2015-09-23 01:10:32 +0300 |
commit | 6cc76d9993e64d0f6d50487b1ec730f2d58b43c5 (patch) | |
tree | ea797fdb9a5ecc2a222d280f8567711a1ef1df07 /indexer/feature_impl.hpp | |
parent | 541b5ec5d86f49f92a4a9d8ec119774ae71e0f55 (diff) |
Make saved middle point in mwm for optimal storing of geometry's first points.
!Note! Changes (HEADER_FILE_TAG) in feature_sorter.cpp can reproduce ugly bug.
Diffstat (limited to 'indexer/feature_impl.hpp')
-rw-r--r-- | indexer/feature_impl.hpp | 44 |
1 files changed, 22 insertions, 22 deletions
diff --git a/indexer/feature_impl.hpp b/indexer/feature_impl.hpp index 47219bab17..2f2feb1699 100644 --- a/indexer/feature_impl.hpp +++ b/indexer/feature_impl.hpp @@ -32,19 +32,19 @@ namespace feature } template <class TSink> - void WriteCellsSimple(vector<int64_t> & cells, TSink & sink) + void WriteCellsSimple(vector<int64_t> const & cells, int64_t base, TSink & sink) { for (size_t i = 0; i < cells.size(); ++i) - WriteVarInt(sink, i == 0 ? cells[0] : cells[i] - cells[i-1]); + WriteVarInt(sink, i == 0 ? cells[0] - base : cells[i] - cells[i-1]); } template <class TSink> - void WriteCells(vector<int64_t> & cells, TSink & sink) + void WriteCells(vector<int64_t> const & cells, int64_t base, TSink & sink) { vector<char> buffer; MemWriter<vector<char> > writer(buffer); - WriteCellsSimple(cells, writer); + WriteCellsSimple(cells, base, writer); uint32_t const count = static_cast<uint32_t>(buffer.size()); WriteVarUint(sink, count); @@ -57,8 +57,8 @@ namespace feature int64_t m_id; public: - points_emitter(TCont & points, uint32_t count) - : m_points(points), m_id(0) + points_emitter(TCont & points, uint32_t count, int64_t base) + : m_points(points), m_id(base) { m_points.reserve(count); } @@ -69,64 +69,64 @@ namespace feature }; template <class TCont> - void const * ReadPointsSimple(void const * p, size_t count, TCont & points) + void const * ReadPointsSimple(void const * p, size_t count, int64_t base, TCont & points) { - return ReadVarInt64Array(p, count, points_emitter<TCont>(points, count)); + return ReadVarInt64Array(p, count, points_emitter<TCont>(points, count, base)); } template <class TCont, class TSource> - void ReadPoints(TCont & points, TSource & src) + void ReadPoints(TCont & points, int64_t base, TSource & src) { uint32_t const count = ReadVarUint<uint32_t>(src); vector<char> buffer(count); char * p = &buffer[0]; src.Read(p, count); - ReadVarInt64Array(p, p + count, points_emitter<TCont>(points, count / 2)); + ReadVarInt64Array(p, p + count, points_emitter<TCont>(points, count / 2, base)); } } template <class TSink> - void SavePointsSimple(vector<m2::PointD> const & points, TSink & sink) + void SavePointsSimple(vector<m2::PointD> const & points, int64_t base, TSink & sink) { ASSERT_GREATER ( points.size(), 1, () ); vector<int64_t> cells; detail::TransformPoints(points, cells); - detail::WriteCellsSimple(cells, sink); + detail::WriteCellsSimple(cells, base, sink); } template <class TSink> - void SavePoints(vector<m2::PointD> const & points, TSink & sink) + void SavePoints(vector<m2::PointD> const & points, int64_t base, TSink & sink) { ASSERT_GREATER ( points.size(), 1, () ); vector<int64_t> cells; detail::TransformPoints(points, cells); - detail::WriteCells(cells, sink); + detail::WriteCells(cells, base, sink); } template <class TCont> - void const * LoadPointsSimple(void const * p, size_t count, TCont & points) + void const * LoadPointsSimple(void const * p, size_t count, int64_t base, TCont & points) { ASSERT_GREATER ( count, 1, () ); - void const * ret = detail::ReadPointsSimple(p, count, points); + void const * ret = detail::ReadPointsSimple(p, count, base, points); ASSERT_GREATER ( points.size(), 1, () ); return ret; } template <class TCont, class TSource> - void LoadPoints(TCont & points, TSource & src) + void LoadPoints(TCont & points, int64_t base, TSource & src) { - detail::ReadPoints(points, src); + detail::ReadPoints(points, base, src); ASSERT_GREATER ( points.size(), 1, () ); } template <class TSink> - void SaveTriangles(vector<m2::PointD> const & triangles, TSink & sink) + void SaveTriangles(vector<m2::PointD> const & triangles, int64_t base, TSink & sink) { uint32_t const count = triangles.size(); ASSERT_GREATER ( count, 0, () ); @@ -135,13 +135,13 @@ namespace feature vector<int64_t> cells; detail::TransformPoints(triangles, cells); - detail::WriteCells(cells, sink); + detail::WriteCells(cells, base, sink); } template <class TCont, class TSource> - void LoadTriangles(TCont & points, TSource & src) + void LoadTriangles(TCont & points, int64_t base, TSource & src) { - detail::ReadPoints(points, src); + detail::ReadPoints(points, base, src); uint32_t const count = points.size(); ASSERT_GREATER ( count, 0, () ); |