From 8930c400238c59d393d3436250c2c2b5600647e5 Mon Sep 17 00:00:00 2001 From: Yury Melnichek Date: Sat, 23 Apr 2011 01:58:47 +0200 Subject: [PATCH] Serialize first point as difference of points, not as difference of int64s. --- indexer/feature.cpp | 16 ++++++++++------ indexer/feature.hpp | 4 ++-- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/indexer/feature.cpp b/indexer/feature.cpp index 1f4484f7e7..de4c8c31de 100644 --- a/indexer/feature.cpp +++ b/indexer/feature.cpp @@ -4,10 +4,12 @@ #include "feature_impl.hpp" #include "feature_visibility.hpp" #include "scales.hpp" +#include "geometry_coding.hpp" #include "geometry_serialization.hpp" #include "../defines.hpp" // just for file extensions +#include "../geometry/pointu_to_uint64.hpp" #include "../geometry/rect2d.hpp" #include "../geometry/region2d.hpp" @@ -222,7 +224,7 @@ uint8_t FeatureBuilder1::GetHeader() const return header; } -void FeatureBuilder1::SerializeBase(buffer_t & data, int64_t base) const +void FeatureBuilder1::SerializeBase(buffer_t & data, m2::PointU const & basePoint) const { PushBackByteSink sink(data); @@ -241,7 +243,7 @@ void FeatureBuilder1::SerializeBase(buffer_t & data, int64_t base) const } if (m_bPoint) - WriteVarInt(sink, feature::pts::FromPoint(m_Center) - base); + WriteVarUint(sink, EncodeDelta(PointD2PointU(m_Center.x, m_Center.y), basePoint)); } void FeatureBuilder1::Serialize(buffer_t & data) const @@ -250,7 +252,7 @@ void FeatureBuilder1::Serialize(buffer_t & data) const data.clear(); - SerializeBase(data, 0); + SerializeBase(data, m2::PointU(0, 0)); PushBackByteSink sink(data); @@ -342,7 +344,7 @@ bool FeatureBuilder2::PreSerialize(buffers_holder_t const & data) return base_type::PreSerialize(); } -namespace +namespace { template class BitSink { @@ -382,7 +384,7 @@ void FeatureBuilder2::Serialize(buffers_holder_t & data, int64_t base) data.m_buffer.clear(); // header data serialization - SerializeBase(data.m_buffer, base); + SerializeBase(data.m_buffer, m2::Uint64ToPointU(static_cast(base))); PushBackByteSink sink(data.m_buffer); @@ -514,7 +516,9 @@ void FeatureBase::ParseCommon() const if (h & HEADER_HAS_POINT) { - m_Center = feature::pts::ToPoint(ReadVarInt(source) + m_base); + CoordPointT center = PointU2PointD(DecodeDelta(ReadVarUint(source), + m2::Uint64ToPointU(m_base))); + m_Center = m2::PointD(center.first, center.second); m_LimitRect.Add(m_Center); } diff --git a/indexer/feature.hpp b/indexer/feature.hpp index a616b4a3da..2713f6ed17 100644 --- a/indexer/feature.hpp +++ b/indexer/feature.hpp @@ -55,7 +55,7 @@ public: m_Types.clear(); m_Types.push_back(type); } - + bool IsTypeExist(uint32_t t) const; bool AssignType_SetDifference(vector const & diffTypes); @@ -66,7 +66,7 @@ public: /// @name Serialization. //@{ void Serialize(buffer_t & data) const; - void SerializeBase(buffer_t & data, int64_t base) const; + void SerializeBase(buffer_t & data, m2::PointU const & basePoint) const; void Deserialize(buffer_t & data); //@}