From 3835b0917658787a3e4edeeab47338381eb61777 Mon Sep 17 00:00:00 2001 From: Mikhail Gorbushin Date: Wed, 4 Sep 2019 16:03:12 +0300 Subject: [PATCH] [routing] rid from usage backPoint and frontPoint of CrossMwmTransition in routing --- routing/cross_mwm_connector.hpp | 29 ++-------- routing/cross_mwm_connector_serialization.hpp | 57 ++++++++----------- .../cross_mwm_connector_test.cpp | 49 +++++----------- 3 files changed, 44 insertions(+), 91 deletions(-) diff --git a/routing/cross_mwm_connector.hpp b/routing/cross_mwm_connector.hpp index b5ad9418e1..12e8342413 100644 --- a/routing/cross_mwm_connector.hpp +++ b/routing/cross_mwm_connector.hpp @@ -47,13 +47,12 @@ public: } void AddTransition(CrossMwmId const & crossMwmId, uint32_t featureId, uint32_t segmentIdx, bool oneWay, - bool forwardIsEnter, m2::PointD const & backPoint, - m2::PointD const & frontPoint) + bool forwardIsEnter) { featureId += m_featureNumerationOffset; Transition transition(connector::kFakeIndex, connector::kFakeIndex, crossMwmId, - oneWay, forwardIsEnter, backPoint, frontPoint); + oneWay, forwardIsEnter); if (forwardIsEnter) { @@ -135,25 +134,16 @@ public: return nullptr; auto const & transition = tIt->second; - CHECK_EQUAL(transition.m_crossMwmId, crossMwmId, - ("feature:", featureId, ", segment:", segmentIdx, - ", point:", MercatorBounds::ToLatLon(transition.m_frontPoint))); + CHECK_EQUAL(transition.m_crossMwmId, crossMwmId, ("fId:", featureId, ", segId:", segmentIdx)); bool const isForward = transition.m_forwardIsEnter == isEnter; if (transition.m_oneWay && !isForward) return nullptr; Segment const & segment = isEnter ? GetEnter(transition.m_enterIdx) : GetExit(transition.m_exitIdx); - CHECK_EQUAL(segment.IsForward(), isForward, - ("crossMwmId:", crossMwmId, ", segment:", segment, - ", point:", MercatorBounds::ToLatLon(transition.m_frontPoint))); - return &segment; - } + CHECK_EQUAL(segment.IsForward(), isForward, ("fId:", featureId, ", segId:", segmentIdx)); - m2::PointD const & GetPoint(Segment const & segment, bool front) const - { - auto const & transition = GetTransition(segment); - return segment.IsForward() == front ? transition.m_frontPoint : transition.m_backPoint; + return &segment; } void GetOutgoingEdgeList(Segment const & segment, std::vector & edges) const @@ -248,12 +238,10 @@ private: Transition() = default; Transition(uint32_t enterIdx, uint32_t exitIdx, CrossMwmIdInner const & crossMwmId, bool oneWay, - bool forwardIsEnter, m2::PointD const & backPoint, m2::PointD const & frontPoint) + bool forwardIsEnter) : m_enterIdx(enterIdx) , m_exitIdx(exitIdx) , m_crossMwmId(crossMwmId) - , m_backPoint(backPoint) - , m_frontPoint(frontPoint) , m_oneWay(oneWay) , m_forwardIsEnter(forwardIsEnter) { @@ -262,11 +250,6 @@ private: uint32_t m_enterIdx = 0; uint32_t m_exitIdx = 0; CrossMwmIdInner m_crossMwmId = CrossMwmIdInner(); - // Endpoints of transition segment. - // m_backPoint = points[segmentIdx] - // m_frontPoint = points[segmentIdx + 1] - m2::PointD m_backPoint = m2::PointD::Zero(); - m2::PointD m_frontPoint = m2::PointD::Zero(); bool m_oneWay = false; // Transition represents both forward and backward segments with same featureId, segmentIdx. // m_forwardIsEnter == true means: forward segment is enter to mwm: diff --git a/routing/cross_mwm_connector_serialization.hpp b/routing/cross_mwm_connector_serialization.hpp index b1d6bc2f9e..9fae407c9d 100644 --- a/routing/cross_mwm_connector_serialization.hpp +++ b/routing/cross_mwm_connector_serialization.hpp @@ -16,6 +16,7 @@ #include "base/checked_cast.hpp" #include "base/geo_object_id.hpp" +#include "base/macros.hpp" #include #include @@ -61,13 +62,10 @@ public: Transition() = default; Transition(CrossMwmId const & crossMwmId, uint32_t featureId, uint32_t segmentIdx, - VehicleMask roadMask, VehicleMask oneWayMask, bool forwardIsEnter, - m2::PointD const & backPoint, m2::PointD const & frontPoint) + VehicleMask roadMask, VehicleMask oneWayMask, bool forwardIsEnter) : m_crossMwmId(crossMwmId) , m_featureId(featureId) , m_segmentIdx(segmentIdx) - , m_backPoint(backPoint) - , m_frontPoint(frontPoint) , m_roadMask(roadMask) , m_oneWayMask(oneWayMask) , m_forwardIsEnter(forwardIsEnter) @@ -91,11 +89,13 @@ public: } template - void Serialize(serial::GeometryCodingParams const & codingParams, uint32_t bitsPerCrossMwmId, - uint8_t bitsPerMask, Sink & sink) const + void Serialize(uint32_t bitsPerCrossMwmId, uint8_t bitsPerMask, Sink & sink) const { - serial::SavePoint(sink, m_backPoint, codingParams); - serial::SavePoint(sink, m_frontPoint, codingParams); + // TODO (@gmoryes) + // We do not use back and front point of segment in code, so we just write + // zero to this 128 bits. Need to remove this data from mwm section. + WriteVarUint(sink, 0); + WriteVarUint(sink, 0); BitWriter writer(sink); WriteCrossMwmId(m_crossMwmId, bitsPerCrossMwmId, writer); @@ -126,11 +126,13 @@ public: } template - void Deserialize(serial::GeometryCodingParams const & codingParams, uint32_t bitsPerCrossMwmId, - uint8_t bitsPerMask, Source & src) + void Deserialize(uint32_t bitsPerCrossMwmId, uint8_t bitsPerMask, Source & src) { - m_backPoint = serial::LoadPoint(src, codingParams); - m_frontPoint = serial::LoadPoint(src, codingParams); + // TODO (@gmoryes) + // We do not use back and front point of segment in code, so we just skip this 128 bits. + // Need to remove this data from mwm section. + UNUSED_VALUE(ReadVarUint(src)); + UNUSED_VALUE(ReadVarUint(src)); BitReader reader(src); ReadCrossMwmId(bitsPerCrossMwmId, reader, m_crossMwmId); @@ -144,8 +146,6 @@ public: CrossMwmId const & GetCrossMwmId() const { return m_crossMwmId; } uint32_t GetFeatureId() const { return m_featureId; } uint32_t GetSegmentIdx() const { return m_segmentIdx; } - m2::PointD const & GetBackPoint() const { return m_backPoint; } - m2::PointD const & GetFrontPoint() const { return m_frontPoint; } bool ForwardIsEnter() const { return m_forwardIsEnter; } VehicleMask GetRoadMask() const { return m_roadMask; } VehicleMask GetOneWayMask() const { return m_oneWayMask; } @@ -154,8 +154,6 @@ public: CrossMwmId m_crossMwmId = CrossMwmId(); uint32_t m_featureId = 0; uint32_t m_segmentIdx = 0; - m2::PointD m_backPoint = m2::PointD::Zero(); - m2::PointD m_frontPoint = m2::PointD::Zero(); VehicleMask m_roadMask = 0; VehicleMask m_oneWayMask = 0; bool m_forwardIsEnter = false; @@ -166,15 +164,15 @@ public: template static void Serialize(std::vector> const & transitions, CrossMwmConnectorPerVehicleType const & connectors, - serial::GeometryCodingParams const & codingParams, Sink & sink) + Sink & sink) { uint32_t const bitsPerCrossMwmId = CalcBitsPerCrossMwmId(transitions); auto const bitsPerMask = GetBitsPerMask(); std::vector transitionsBuf; - WriteTransitions(transitions, codingParams, bitsPerCrossMwmId, bitsPerMask, transitionsBuf); + WriteTransitions(transitions, bitsPerCrossMwmId, bitsPerMask, transitionsBuf); Header header(base::checked_cast(transitions.size()), - base::checked_cast(transitionsBuf.size()), codingParams, + base::checked_cast(transitionsBuf.size()), bitsPerCrossMwmId, bitsPerMask); std::vector> weightBuffers(connectors.size()); @@ -216,8 +214,7 @@ public: for (size_t i = 0; i < numTransitions; ++i) { Transition transition; - transition.Deserialize(header.GetGeometryCodingParams(), header.GetBitsPerCrossMwmId(), - header.GetBitsPerMask(), src); + transition.Deserialize(header.GetBitsPerCrossMwmId(), header.GetBitsPerMask(), src); AddTransition(transition, requiredMask, connector); } @@ -301,8 +298,7 @@ public: bool const isOneWay = (transition.GetOneWayMask() & requiredMask) != 0; connector.AddTransition(transition.GetCrossMwmId(), transition.GetFeatureId(), - transition.GetSegmentIdx(), isOneWay, transition.ForwardIsEnter(), - transition.GetBackPoint(), transition.GetFrontPoint()); + transition.GetSegmentIdx(), isOneWay, transition.ForwardIsEnter()); } private: @@ -364,12 +360,10 @@ private: public: Header() = default; - Header(uint32_t numTransitions, uint64_t sizeTransitions, - serial::GeometryCodingParams const & codingParams, uint32_t bitsPerCrossMwmId, + Header(uint32_t numTransitions, uint64_t sizeTransitions, uint32_t bitsPerCrossMwmId, uint8_t bitsPerMask) : m_numTransitions(numTransitions) , m_sizeTransitions(sizeTransitions) - , m_codingParams(codingParams) , m_bitsPerCrossMwmId(bitsPerCrossMwmId) , m_bitsPerMask(bitsPerMask) { @@ -382,7 +376,8 @@ private: WriteToSink(sink, m_numTransitions); WriteToSink(sink, m_sizeTransitions); WriteToSink(sink, m_granularity); - m_codingParams.Save(sink); + // TODO (@gmoryes) Get rid of geometry coding params. + serial::GeometryCodingParams().Save(sink); WriteToSink(sink, m_bitsPerCrossMwmId); WriteToSink(sink, m_bitsPerMask); @@ -404,7 +399,8 @@ private: m_numTransitions = ReadPrimitiveFromSource(src); m_sizeTransitions = ReadPrimitiveFromSource(src); m_granularity = ReadPrimitiveFromSource(src); - m_codingParams.Load(src); + // TODO (@gmoryes) Get rid from geometry coding params. + serial::GeometryCodingParams().Load(src); m_bitsPerCrossMwmId = ReadPrimitiveFromSource(src); m_bitsPerMask = ReadPrimitiveFromSource(src); @@ -419,7 +415,6 @@ private: uint32_t GetNumTransitions() const { return m_numTransitions; } uint64_t GetSizeTransitions() const { return m_sizeTransitions; } Weight GetGranularity() const { return m_granularity; } - serial::GeometryCodingParams const & GetGeometryCodingParams() const { return m_codingParams; } uint8_t GetBitsPerCrossMwmId() const { return m_bitsPerCrossMwmId; } uint8_t GetBitsPerMask() const { return m_bitsPerMask; } std::vector
const & GetSections() const { return m_sections; } @@ -429,7 +424,6 @@ private: uint32_t m_numTransitions = 0; uint64_t m_sizeTransitions = 0; Weight m_granularity = kGranularity; - serial::GeometryCodingParams m_codingParams; uint32_t m_bitsPerCrossMwmId = 0; uint8_t m_bitsPerMask = 0; std::vector
m_sections; @@ -471,14 +465,13 @@ private: template static void WriteTransitions(std::vector> const & transitions, - serial::GeometryCodingParams const & codingParams, uint32_t bitsPerOsmId, uint8_t bitsPerMask, std::vector & buffer) { MemWriter> memWriter(buffer); for (auto const & transition : transitions) - transition.Serialize(codingParams, bitsPerOsmId, bitsPerMask, memWriter); + transition.Serialize(bitsPerOsmId, bitsPerMask, memWriter); } static void WriteWeights(std::vector const & weights, std::vector & buffer); diff --git a/routing/routing_tests/cross_mwm_connector_test.cpp b/routing/routing_tests/cross_mwm_connector_test.cpp index 6a2712f478..bb8094d3c6 100644 --- a/routing/routing_tests/cross_mwm_connector_test.cpp +++ b/routing/routing_tests/cross_mwm_connector_test.cpp @@ -53,7 +53,7 @@ void TestOneWayEnter(CrossMwmId const & crossMwmId) uint32_t constexpr segmentIdx = 1; auto connector = CreateConnector(); connector.AddTransition(crossMwmId, featureId, segmentIdx, true /* oneWay */, - true /* forwardIsEnter */, {} /* backPoint */, {} /* frontPoint */); + true /* forwardIsEnter */); TestConnectorConsistency(connector); TEST_EQUAL(connector.GetEnters().size(), 1, ()); @@ -79,7 +79,7 @@ void TestOneWayExit(CrossMwmId const & crossMwmId) uint32_t constexpr segmentIdx = 1; auto connector = CreateConnector(); connector.AddTransition(crossMwmId, featureId, segmentIdx, true /* oneWay */, - false /* forwardIsEnter */, {} /* backPoint */, {} /* frontPoint */); + false /* forwardIsEnter */); TestConnectorConsistency(connector); TEST_EQUAL(connector.GetEnters().size(), 0, ()); @@ -105,7 +105,7 @@ void TestTwoWayEnter(CrossMwmId const & crossMwmId) uint32_t constexpr segmentIdx = 1; auto connector = CreateConnector(); connector.AddTransition(crossMwmId, featureId, segmentIdx, false /* oneWay */, - true /* forwardIsEnter */, {} /* backPoint */, {} /* frontPoint */); + true /* forwardIsEnter */); TestConnectorConsistency(connector); TEST_EQUAL(connector.GetEnters().size(), 1, ()); @@ -130,7 +130,7 @@ void TestTwoWayExit(CrossMwmId const & crossMwmId) uint32_t constexpr segmentIdx = 1; auto connector = CreateConnector(); connector.AddTransition(crossMwmId, featureId, segmentIdx, false /* oneWay */, - false /* forwardIsEnter */, {} /* backPoint */, {} /* frontPoint */); + false /* forwardIsEnter */); TestConnectorConsistency(connector); TEST_EQUAL(connector.GetEnters().size(), 1, ()); @@ -166,7 +166,7 @@ void TestSerialization(vector> writer(buffer); - CrossMwmConnectorSerializer::Serialize(transitions, connectors, codingParams, writer); + CrossMwmConnectorSerializer::Serialize(transitions, connectors, writer); } auto connector = CreateConnector(); @@ -215,24 +215,6 @@ void TestSerialization(vector connectors; @@ -282,7 +264,7 @@ void TestWeightsSerialization() serial::GeometryCodingParams const codingParams; MemWriter> writer(buffer); - CrossMwmConnectorSerializer::Serialize(transitions, connectors, codingParams, writer); + CrossMwmConnectorSerializer::Serialize(transitions, connectors, writer); } auto connector = CreateConnector(); @@ -362,23 +344,18 @@ UNIT_TEST(Serialization) vector> const transitions = { /* osmId featureId, segmentIdx, roadMask, oneWayMask, forwardIsEnter, backPoint, frontPoint */ - {base::MakeOsmWay(100ULL), 10, 1, kCarMask, kCarMask, true, m2::PointD(1.1, 1.2), - m2::PointD(1.3, 1.4)}, - {base::MakeOsmWay(200ULL), 20, 2, kCarMask, 0, true, m2::PointD(2.1, 2.2), - m2::PointD(2.3, 2.4)}, - {base::MakeOsmWay(300ULL), 30, 3, kPedestrianMask, kCarMask, true, m2::PointD(3.1, 3.2), - m2::PointD(3.3, 3.4)}}; + {base::MakeOsmWay(100ULL), 10, 1, kCarMask, kCarMask, true}, + {base::MakeOsmWay(200ULL), 20, 2, kCarMask, 0, true}, + {base::MakeOsmWay(300ULL), 30, 3, kPedestrianMask, kCarMask, true}}; TestSerialization(transitions); } { vector> const transitions = { /* osmId featureId, segmentIdx, roadMask, oneWayMask, forwardIsEnter, backPoint, frontPoint */ {TransitId(1ULL /* stop 1 id */, 2ULL /* stop 2 id */, 1ULL /* line id */), 10, 1, kCarMask, - kCarMask, true, m2::PointD(1.1, 1.2), m2::PointD(1.3, 1.4)}, - {TransitId(1ULL, 3ULL, 1ULL), 20, 2, kCarMask, 0, true, m2::PointD(2.1, 2.2), - m2::PointD(2.3, 2.4)}, - {TransitId(1ULL, 3ULL, 2ULL), 30, 3, kPedestrianMask, kCarMask, true, m2::PointD(3.1, 3.2), - m2::PointD(3.3, 3.4)}}; + kCarMask, true}, + {TransitId(1ULL, 3ULL, 1ULL), 20, 2, kCarMask, 0, true}, + {TransitId(1ULL, 3ULL, 2ULL), 30, 3, kPedestrianMask, kCarMask, true}}; TestSerialization(transitions); } }