From 43260b6cc2e40ec3bf4e9637c018158c12c5a5ea Mon Sep 17 00:00:00 2001 From: Vladimir Byko-Ianko Date: Tue, 3 Oct 2017 15:34:20 +0300 Subject: [PATCH] Serializing and deserializing double at transit section --- generator/transit_generator.hpp | 8 +------- .../routing_common_tests/transit_test.cpp | 1 - routing_common/transit_serdes.hpp | 19 +++++++++++++------ 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/generator/transit_generator.hpp b/generator/transit_generator.hpp index b15fef9d60..88aa825aff 100644 --- a/generator/transit_generator.hpp +++ b/generator/transit_generator.hpp @@ -21,18 +21,12 @@ public: DeserializerFromJson(json_struct_t * node) : m_node(node) {} template - typename std::enable_if::value || std::is_enum::value>::type + typename std::enable_if::value || std::is_enum::value || std::is_same::value>::type operator()(T & t, char const * name = nullptr) { GetField(t, name); } - template - typename std::enable_if::value>::type operator()(T & t, char const * name = nullptr) - { - NOTIMPLEMENTED(); - } - void operator()(std::string & s, char const * name = nullptr) { GetField(s, name); } void operator()(m2::PointD & p, char const * name = nullptr); diff --git a/routing_common/routing_common_tests/transit_test.cpp b/routing_common/routing_common_tests/transit_test.cpp index 732e2e3988..5ba9038543 100644 --- a/routing_common/routing_common_tests/transit_test.cpp +++ b/routing_common/routing_common_tests/transit_test.cpp @@ -59,4 +59,3 @@ UNIT_TEST(Transit_StopSerialization) } } } // namespace - diff --git a/routing_common/transit_serdes.hpp b/routing_common/transit_serdes.hpp index d972653053..8032e5c38a 100644 --- a/routing_common/transit_serdes.hpp +++ b/routing_common/transit_serdes.hpp @@ -24,6 +24,11 @@ namespace routing { namespace transit { +// Note. For the time being double at transit section is used only for saving weight of edges (in seconds). +// Let us assume that it takes less than 10^7 seconds (115 days) to get from one station to a neighboring one. +double constexpr kMinDoubleAtTransit = 0.0; +double constexpr kMaxDoubleAtTransit = 10000000.0; + template class Serializer { @@ -37,10 +42,11 @@ public: WriteToSink(m_sink, t); } - template - typename std::enable_if::value>::type operator()(T const & t, char const * /* name */ = nullptr) + void operator()(double d, char const * name = nullptr) { - NOTIMPLEMENTED(); + CHECK_GREATER_OR_EQUAL(d, 0, ()); + CHECK_LESS_OR_EQUAL(d, kMaxDoubleAtTransit, ()); + (*this)(DoubleToUint32(d, kMinDoubleAtTransit, kMaxDoubleAtTransit, POINT_COORD_BITS), name); } void operator()(std::string const & s, char const * /* name */ = nullptr) @@ -87,10 +93,11 @@ public: ReadPrimitiveFromSource(m_source, t); } - template - typename std::enable_if::value>::type operator()(T & t, char const * name = nullptr) + double operator()(double & d, char const * name = nullptr) { - NOTIMPLEMENTED(); + uint32_t ui; + (*this)(ui, name); + d = Uint32ToDouble(ui, kMinDoubleAtTransit, kMaxDoubleAtTransit, POINT_COORD_BITS); } void operator()(std::string & s, char const * /* name */ = nullptr)