Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Byko-Ianko <v.bykoianko@corp.mail.ru>2017-10-31 14:21:24 +0300
committerDaria Volvenkova <d.volvenkova@corp.mail.ru>2017-10-31 17:49:30 +0300
commit8bf22f62d82f76659b00705161bb7c36112897de (patch)
treefa045228c7525204033c5bbf87be7052cb458fbe
parenteffc105c6df0d887af0967af7d0291d0605003e5 (diff)
[transit] Adding stopsOffset to header and implementing VisitHeader() method to reduce number of trasit data structures friends.
-rw-r--r--generator/transit_generator.cpp5
-rw-r--r--routing/transit_graph_loader.cpp2
-rw-r--r--routing_common/routing_common_tests/transit_test.cpp23
-rw-r--r--routing_common/transit_serdes.hpp6
-rw-r--r--routing_common/transit_types.cpp16
-rw-r--r--routing_common/transit_types.hpp22
6 files changed, 41 insertions, 33 deletions
diff --git a/generator/transit_generator.cpp b/generator/transit_generator.cpp
index 61188ad2b1..e1d7e44f39 100644
--- a/generator/transit_generator.cpp
+++ b/generator/transit_generator.cpp
@@ -283,12 +283,13 @@ void BuildTransit(string const & mwmDir, string const & countryId,
auto const startOffset = w.Pos();
Serializer<FileWriter> serializer(w);
FixedSizeSerializer<FileWriter> numberSerializer(w);
- header.Visit(numberSerializer);
+ VisitHeader(numberSerializer, header);
vector<Stop> stops;
DeserializeFromJson(root, "stops", mapping, stops);
CHECK(IsValid(stops), ("stops:", stops));
sort(stops.begin(), stops.end(), LessById);
+ header.m_stopsOffset = base::checked_cast<uint32_t>(w.Pos() - startOffset);
serializer(stops);
header.m_gatesOffset = base::checked_cast<uint32_t>(w.Pos() - startOffset);
@@ -318,7 +319,7 @@ void BuildTransit(string const & mwmDir, string const & countryId,
CHECK(header.IsValid(), (header));
auto const endOffset = w.Pos();
w.Seek(startOffset);
- header.Visit(numberSerializer);
+ VisitHeader(numberSerializer, header);
w.Seek(endOffset);
LOG(LINFO, (TRANSIT_FILE_TAG, "section is ready. Header:", header));
}
diff --git a/routing/transit_graph_loader.cpp b/routing/transit_graph_loader.cpp
index bed3f454f6..07c7182b4b 100644
--- a/routing/transit_graph_loader.cpp
+++ b/routing/transit_graph_loader.cpp
@@ -62,7 +62,7 @@ unique_ptr<TransitGraph> TransitGraphLoader::CreateTransitGraph(NumMwmId numMwmI
transit::FixedSizeDeserializer<ReaderSource<FilesContainerR::TReader>> numberDeserializer(src);
transit::TransitHeader header;
- header.Visit(numberDeserializer);
+ VisitHeader(numberDeserializer, header);
vector<transit::Stop> stops;
deserializer(stops);
diff --git a/routing_common/routing_common_tests/transit_test.cpp b/routing_common/routing_common_tests/transit_test.cpp
index a7ea03433e..646236a407 100644
--- a/routing_common/routing_common_tests/transit_test.cpp
+++ b/routing_common/routing_common_tests/transit_test.cpp
@@ -50,26 +50,25 @@ void TestSerialization(Obj const & obj)
UNIT_TEST(Transit_HeaderRewriting)
{
- TransitHeader const bigHeader(1 /* version */, 1000 /* gatesOffset */, 200000 /* edgesOffset */,
- 300000 /* transfersOffset */, 400000 /* linesOffset */,
- 5000000 /* shapesOffset */, 6000000 /* networksOffset */,
- 700000000 /* endOffset */);
+ TransitHeader const bigHeader(1 /* version */, 500 /* stopsOffset */, 1000 /* gatesOffset */,
+ 200000 /* edgesOffset */, 300000 /* transfersOffset */,
+ 400000 /* linesOffset */, 5000000 /* shapesOffset */,
+ 6000000 /* networksOffset */, 700000000 /* endOffset */);
TransitHeader header;
vector<uint8_t> buffer;
MemWriter<vector<uint8_t>> writer(buffer);
// Writing.
- uint64_t constexpr startOffset = 0;
FixedSizeSerializer<MemWriter<vector<uint8_t>>> serializer(writer);
- header.Visit(serializer);
+ VisitHeader(serializer, header);
auto const endOffset = writer.Pos();
// Rewriting.
header = bigHeader;
- writer.Seek(startOffset);
- header.Visit(serializer);
+ writer.Seek(0 /* start offset */);
+ VisitHeader(serializer, header);
TEST_EQUAL(writer.Pos(), endOffset, ());
// Reading.
@@ -77,7 +76,7 @@ UNIT_TEST(Transit_HeaderRewriting)
ReaderSource<MemReader> src(reader);
TransitHeader deserializedHeader;
FixedSizeDeserializer<ReaderSource<MemReader>> deserializer(src);
- deserializedHeader.Visit(deserializer);
+ VisitHeader(deserializer, deserializedHeader);
TEST(deserializedHeader.IsEqualForTesting(bigHeader), (deserializedHeader, bigHeader));
}
@@ -93,9 +92,9 @@ UNIT_TEST(Transit_HeaderSerialization)
TestSerialization(header);
}
{
- TransitHeader header(1 /* version */, 1000 /* gatesOffset */, 2000 /* edgesOffset */,
- 3000 /* transfersOffset */, 4000 /* linesOffset */, 5000 /* shapesOffset */,
- 6000 /* networksOffset */, 7000 /* endOffset */);
+ TransitHeader header(1 /* version */, 500 /* stopsOffset */, 1000 /* gatesOffset */,
+ 2000 /* edgesOffset */, 3000 /* transfersOffset */, 4000 /* linesOffset */,
+ 5000 /* shapesOffset */, 6000 /* networksOffset */, 7000 /* endOffset */);
TestSerialization(header);
}
}
diff --git a/routing_common/transit_serdes.hpp b/routing_common/transit_serdes.hpp
index 0f843d09bc..a4a939cb31 100644
--- a/routing_common/transit_serdes.hpp
+++ b/routing_common/transit_serdes.hpp
@@ -253,5 +253,11 @@ public:
private:
Source & m_source;
};
+
+template <class T>
+void VisitHeader(T & t, TransitHeader & header)
+{
+ header.Visit(t);
+}
} // namespace transit
} // namespace routing
diff --git a/routing_common/transit_types.cpp b/routing_common/transit_types.cpp
index b6127ccae3..5f48b3bd5c 100644
--- a/routing_common/transit_types.cpp
+++ b/routing_common/transit_types.cpp
@@ -13,11 +13,12 @@ namespace routing
namespace transit
{
// TransitHeader ----------------------------------------------------------------------------------
-TransitHeader::TransitHeader(uint16_t version, uint32_t gatesOffset, uint32_t edgesOffset,
- uint32_t transfersOffset, uint32_t linesOffset, uint32_t shapesOffset,
- uint32_t networksOffset, uint32_t endOffset)
+TransitHeader::TransitHeader(uint16_t version, uint32_t stopsOffset, uint32_t gatesOffset,
+ uint32_t edgesOffset, uint32_t transfersOffset, uint32_t linesOffset,
+ uint32_t shapesOffset, uint32_t networksOffset, uint32_t endOffset)
: m_version(version)
, m_reserve(0)
+ , m_stopsOffset(stopsOffset)
, m_gatesOffset(gatesOffset)
, m_edgesOffset(edgesOffset)
, m_transfersOffset(transfersOffset)
@@ -32,6 +33,7 @@ void TransitHeader::Reset()
{
m_version = 0;
m_reserve = 0;
+ m_stopsOffset = 0;
m_gatesOffset = 0;
m_edgesOffset = 0;
m_transfersOffset = 0;
@@ -45,6 +47,7 @@ bool TransitHeader::IsEqualForTesting(TransitHeader const & header) const
{
return m_version == header.m_version
&& m_reserve == header.m_reserve
+ && m_stopsOffset == header.m_stopsOffset
&& m_gatesOffset == header.m_gatesOffset
&& m_edgesOffset == header.m_edgesOffset
&& m_transfersOffset == header.m_transfersOffset
@@ -56,9 +59,10 @@ bool TransitHeader::IsEqualForTesting(TransitHeader const & header) const
bool TransitHeader::IsValid() const
{
- return m_gatesOffset <= m_edgesOffset && m_edgesOffset <= m_transfersOffset &&
- m_transfersOffset <= m_linesOffset && m_linesOffset <= m_shapesOffset &&
- m_shapesOffset <= m_networksOffset && m_networksOffset <= m_endOffset;
+ return m_stopsOffset <= m_gatesOffset && m_gatesOffset <= m_edgesOffset &&
+ m_edgesOffset <= m_transfersOffset && m_transfersOffset <= m_linesOffset &&
+ m_linesOffset <= m_shapesOffset && m_shapesOffset <= m_networksOffset &&
+ m_networksOffset <= m_endOffset;
}
// FeatureIdentifiers -----------------------------------------------------------------------------
diff --git a/routing_common/transit_types.hpp b/routing_common/transit_types.hpp
index 411cf06706..965ea6de8b 100644
--- a/routing_common/transit_types.hpp
+++ b/routing_common/transit_types.hpp
@@ -12,9 +12,10 @@
namespace routing
{
-class TransitGraphLoader;
namespace transit
{
+struct TransitHeader;
+
using Anchor = uint8_t;
using FeatureId = uint32_t;
using LineId = uint32_t;
@@ -43,18 +44,14 @@ Weight constexpr kInvalidWeight = -1.0;
template <class Source> \
friend class Deserializer; \
friend class DeserializerFromJson; \
- friend class routing::TransitGraphLoader; \
- friend void BuildTransit(std::string const & mwmDir, std::string const & countryId, \
- std::string const & osmIdsToFeatureIdPath, \
- std::string const & transitDir); \
template <class Ser, class Deser, class Obj> \
friend void TestCommonSerialization(Obj const & obj); \
- friend void UnitTest_Transit_HeaderRewriting(); \
+ template <class T> friend void VisitHeader(T & t, TransitHeader & header); \
struct TransitHeader
{
TransitHeader() { Reset(); }
- TransitHeader(uint16_t version, uint32_t gatesOffset, uint32_t edgesOffset,
+ TransitHeader(uint16_t version, uint32_t stopsOffset, uint32_t gatesOffset, uint32_t edgesOffset,
uint32_t transfersOffset, uint32_t linesOffset, uint32_t shapesOffset,
uint32_t networksOffset, uint32_t endOffset);
@@ -66,14 +63,15 @@ private:
DECLARE_TRANSIT_TYPE_FRIENDS
DECLARE_VISITOR_AND_DEBUG_PRINT(
TransitHeader, visitor(m_version, "version"), visitor(m_reserve, "reserve"),
- visitor(m_gatesOffset, "gatesOffset"), visitor(m_edgesOffset, "edgesOffset"),
- visitor(m_transfersOffset, "transfersOffset"), visitor(m_linesOffset, "linesOffset"),
- visitor(m_shapesOffset, "shapesOffset"), visitor(m_networksOffset, "networksOffset"),
- visitor(m_endOffset, "endOffset"))
+ visitor(m_stopsOffset, "stops"), visitor(m_gatesOffset, "gatesOffset"),
+ visitor(m_edgesOffset, "edgesOffset"), visitor(m_transfersOffset, "transfersOffset"),
+ visitor(m_linesOffset, "linesOffset"), visitor(m_shapesOffset, "shapesOffset"),
+ visitor(m_networksOffset, "networksOffset"), visitor(m_endOffset, "endOffset"))
public:
uint16_t m_version;
uint16_t m_reserve;
+ uint32_t m_stopsOffset;
uint32_t m_gatesOffset;
uint32_t m_edgesOffset;
uint32_t m_transfersOffset;
@@ -83,7 +81,7 @@ public:
uint32_t m_endOffset;
};
-static_assert(sizeof(TransitHeader) == 32, "Wrong header size of transit section.");
+static_assert(sizeof(TransitHeader) == 36, "Wrong header size of transit section.");
/// \brief This class represents osm id and feature id of the same feature.
class FeatureIdentifiers