diff --git a/generator/transit_generator.cpp b/generator/transit_generator.cpp index e49d23febc..66b137ba17 100644 --- a/generator/transit_generator.cpp +++ b/generator/transit_generator.cpp @@ -22,6 +22,7 @@ #include "coding/file_container.hpp" #include "coding/file_name_utils.hpp" +#include "coding/file_writer.hpp" #include "platform/country_file.hpp" #include "platform/local_country_file.hpp" @@ -208,7 +209,7 @@ namespace routing namespace transit { // DeserializerFromJson --------------------------------------------------------------------------- -DeserializerFromJson::DeserializerFromJson(json_struct_t* node, +DeserializerFromJson::DeserializerFromJson(json_struct_t * node, OsmIdToFeatureIdsMap const & osmIdToFeatureIds) : m_node(node), m_osmIdToFeatureIds(osmIdToFeatureIds) { @@ -274,13 +275,13 @@ void GraphData::DeserializeFromJson(my::Json const & root, OsmIdToFeatureIdsMap Visit(deserializer); } -void GraphData::SerializeToMwm(FileWriter & writer) const +void GraphData::SerializeToMwm(Writer & writer) const { TransitHeader header; auto const startOffset = writer.Pos(); - Serializer serializer(writer); - FixedSizeSerializer numberSerializer(writer); + Serializer serializer(writer); + FixedSizeSerializer numberSerializer(writer); numberSerializer(header); header.m_stopsOffset = base::checked_cast(writer.Pos() - startOffset); @@ -315,6 +316,47 @@ void GraphData::SerializeToMwm(FileWriter & writer) const LOG(LINFO, (TRANSIT_FILE_TAG, "section is ready. Header:", header)); } +void GraphData::DeserializeForTesting(MemReader & reader) +{ + ReaderSource src(reader); + transit::Deserializer> deserializer(src); + transit::FixedSizeDeserializer> numberDeserializer(src); + + transit::TransitHeader header; + numberDeserializer(header); + CHECK(header.IsValid(), ()); + + CHECK_EQUAL(src.Pos(), header.m_stopsOffset, ("Wrong", TRANSIT_FILE_TAG, "section format.")); + deserializer(m_stops); + CHECK(transit::IsValid(m_stops), ()); + + CHECK_EQUAL(src.Pos(), header.m_gatesOffset, ("Wrong", TRANSIT_FILE_TAG, "section format.")); + deserializer(m_gates); + CHECK(transit::IsValid(m_gates), ()); + + CHECK_EQUAL(src.Pos(), header.m_edgesOffset, ("Wrong", TRANSIT_FILE_TAG, "section format.")); + deserializer(m_edges); + CHECK(transit::IsValid(m_edges), ()); + + CHECK_EQUAL(src.Pos(), header.m_transfersOffset, ("Wrong", TRANSIT_FILE_TAG, "section format.")); + deserializer(m_transfers); + CHECK(transit::IsValid(m_transfers), ()); + + CHECK_EQUAL(src.Pos(), header.m_linesOffset, ("Wrong", TRANSIT_FILE_TAG, "section format.")); + deserializer(m_lines); + CHECK(transit::IsValid(m_lines), ()); + + CHECK_EQUAL(src.Pos(), header.m_shapesOffset, ("Wrong", TRANSIT_FILE_TAG, "section format.")); + deserializer(m_shapes); + CHECK(transit::IsValid(m_shapes), ()); + + CHECK_EQUAL(src.Pos(), header.m_networksOffset, ("Wrong", TRANSIT_FILE_TAG, "section format.")); + deserializer(m_networks); + CHECK(transit::IsValid(m_networks), ()); + + CHECK_EQUAL(src.Pos(), header.m_endOffset, ("Wrong", TRANSIT_FILE_TAG, "section format.")); +} + void GraphData::AppendTo(GraphData const & rhs) { ::Append(rhs.m_stops, m_stops); diff --git a/generator/transit_generator.hpp b/generator/transit_generator.hpp index e57a2b27b1..4ab466313a 100644 --- a/generator/transit_generator.hpp +++ b/generator/transit_generator.hpp @@ -7,7 +7,8 @@ #include "geometry/point2d.hpp" #include "geometry/region2d.hpp" -#include "coding/file_writer.hpp" +#include "coding/reader.hpp" +#include "coding/writer.hpp" #include "base/macros.hpp" #include "base/osm_id.hpp" @@ -30,7 +31,7 @@ using OsmIdToFeatureIdsMap = std::map>; class DeserializerFromJson { public: - DeserializerFromJson(json_struct_t* node, OsmIdToFeatureIdsMap const & osmIdToFeatureIds); + DeserializerFromJson(json_struct_t * node, OsmIdToFeatureIdsMap const & osmIdToFeatureIds); template typename std::enable_if::value || std::is_enum::value || @@ -126,7 +127,8 @@ class GraphData { public: void DeserializeFromJson(my::Json const & root, OsmIdToFeatureIdsMap const & mapping); - void SerializeToMwm(FileWriter & writer) const; + void SerializeToMwm(Writer & writer) const; + void DeserializeForTesting(MemReader & reader); void AppendTo(GraphData const & rhs); void Clear(); bool IsValid() const;