diff options
Diffstat (limited to 'generator/metalines_builder.hpp')
-rw-r--r-- | generator/metalines_builder.hpp | 30 |
1 files changed, 29 insertions, 1 deletions
diff --git a/generator/metalines_builder.hpp b/generator/metalines_builder.hpp index 8fd89af7f1..43c4c2fba6 100644 --- a/generator/metalines_builder.hpp +++ b/generator/metalines_builder.hpp @@ -4,6 +4,10 @@ #include "generator/feature_builder.hpp" #include "generator/osm_element.hpp" +#include "coding/reader.hpp" +#include "coding/write_to_sink.hpp" +#include "coding/writer.hpp" + #include <cstdlib> #include <cstdint> #include <map> @@ -37,7 +41,29 @@ public: uint64_t GetStart() const { return m_start; } uint64_t GetEnd() const { return m_end; } + template <typename T> + void Serialize(T & w) + { + WriteVarUint(w, m_start); + WriteVarUint(w, m_end); + WriteToSink(w, m_oneway); + rw::WriteVectorOfPOD(w, m_ways); + } + + template <typename T> + static LineString Deserialize(T & r) + { + LineString ls; + ls.m_start = ReadVarUint<uint64_t>(r); + ls.m_end = ReadVarUint<uint64_t>(r); + ReadPrimitiveFromSource(r, ls.m_oneway); + rw::ReadVectorOfPOD(r, ls.m_ways); + return ls; + } + private: + LineString() = default; + uint64_t m_start; uint64_t m_end; bool m_oneway; @@ -75,6 +101,8 @@ public: /// Add a highway segment to the collection of metalines. void CollectFeature(FeatureBuilder const & feature, OsmElement const & element) override; + void Finish() override; + void Merge(generator::CollectorInterface const & collector) override; void MergeInto(MetalinesBuilder & collector) const override; @@ -83,7 +111,7 @@ protected: void OrderCollectedData() override; private: - std::unordered_multimap<size_t, std::shared_ptr<LineString>> m_data; + std::unique_ptr<FileWriter> m_writer; }; // Read an intermediate file from MetalinesBuilder and convert it to an mwm section. |