diff --git a/generator/feature_builder.hpp b/generator/feature_builder.hpp index 3ac0645ff9..c32ce2e0bc 100644 --- a/generator/feature_builder.hpp +++ b/generator/feature_builder.hpp @@ -19,8 +19,8 @@ class FeatureBuilder1 friend string DebugPrint(FeatureBuilder1 const & f); public: - typedef vector TRing; - typedef list TPolygon; + typedef vector TPointSeq; + typedef list TGeometry; FeatureBuilder1(); @@ -43,7 +43,7 @@ public: //@} inline feature::Metadata const & GetMetadata() const { return m_params.GetMetadata(); } -// inline list> const & GetGeometry() { return m_polygons; } + inline TGeometry const & GetGeometry() const { return m_polygons; } inline feature::EGeomType GetGeomType() const { return m_params.GetGeomType(); } inline void AddType(uint32_t type) { m_params.AddType(type); } diff --git a/generator/feature_generator.cpp b/generator/feature_generator.cpp index 1638d241c0..b51cc4f0f0 100644 --- a/generator/feature_generator.cpp +++ b/generator/feature_generator.cpp @@ -41,6 +41,8 @@ FeaturesCollector::~FeaturesCollector() FlushBuffer(); /// Check file size (void)GetFileSize(m_datFile); + uint64_t terminator = 0; + m_dumpFileStream.write(reinterpret_cast(&terminator), sizeof(terminator)); m_dumpFileStream.close(); } @@ -117,7 +119,18 @@ uint32_t FeaturesCollector::WriteFeatureBase(vector const & bytes, Feature void FeaturesCollector::DumpFeatureGeometry(FeatureBuilder1 const & fb) { + FeatureBuilder1::TGeometry const & geom = fb.GetGeometry(); + if (geom.empty()) + return; + uint64_t num_geometries = geom.size(); + m_dumpFileStream.write(reinterpret_cast(&num_geometries), sizeof(num_geometries)); + for (FeatureBuilder1::TPointSeq const & points : geom) + { + uint64_t num_points = points.size(); + m_dumpFileStream.write(reinterpret_cast(&num_points), sizeof(num_points)); + m_dumpFileStream.write(reinterpret_cast(points.data()), sizeof(FeatureBuilder1::TPointSeq::value_type) * points.size()); + } } void FeaturesCollector::operator() (FeatureBuilder1 const & fb) @@ -125,6 +138,9 @@ void FeaturesCollector::operator() (FeatureBuilder1 const & fb) FeatureBuilder1::buffer_t bytes; fb.Serialize(bytes); (void)WriteFeatureBase(bytes, fb); + + if (!m_dumpFileName.empty()) + DumpFeatureGeometry(fb); }