From da0ba07a2779d0205e457b17c961fac4689572c6 Mon Sep 17 00:00:00 2001 From: Mikhail Gorbushin Date: Tue, 17 Jul 2018 19:36:07 +0300 Subject: [PATCH] [routing] set osm::Id::Way to transitions --- generator/routing_index_generator.cpp | 1 + routing/cross_mwm_connector_serialization.hpp | 10 +++++++--- routing/cross_mwm_index_graph.hpp | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/generator/routing_index_generator.cpp b/generator/routing_index_generator.cpp index fe49d376ba..0103acbaa4 100644 --- a/generator/routing_index_generator.cpp +++ b/generator/routing_index_generator.cpp @@ -244,6 +244,7 @@ void CalcCrossMwmTransitions( auto const it = featureIdToOsmId.find(featureId); CHECK(it != featureIdToOsmId.end(), ("Can't find osm id for feature id", featureId)); auto const osmId = it->second; + CHECK(osmId.GetType() == osm::Id::Type::Way, ()); bool prevPointIn = m2::RegionsContain(borders, f.GetPoint(0)); diff --git a/routing/cross_mwm_connector_serialization.hpp b/routing/cross_mwm_connector_serialization.hpp index 15a25c50c3..c48b4b7e3f 100644 --- a/routing/cross_mwm_connector_serialization.hpp +++ b/routing/cross_mwm_connector_serialization.hpp @@ -116,10 +116,12 @@ public: }; template - void ReadCrossMwmId(uint8_t bits, BitReader & reader, osm::Id & readed) + void ReadCrossMwmId(uint8_t bits, BitReader & reader, osm::Id & osmId) { CHECK_LESS_OR_EQUAL(bits, connector::kOsmIdBits, ()); - readed = osm::Id(reader.ReadAtMost64Bits(bits)); + /* We lost data about transition type after compression (look at CalcBitsPerCrossMwmId method), + * but we used Way in routing, so suggest, that it is Way */ + osmId = osm::Id::Way(reader.ReadAtMost64Bits(bits)); } template @@ -436,9 +438,11 @@ private: std::vector> const & transitions) { osm::Id osmId(0ULL); - for (Transition const & transition : transitions) + for (auto const & transition : transitions) osmId = std::max(osmId, transition.GetCrossMwmId()); + /* Note, that we lose osm::Id::Type bits here, remember about + * it in ReadCrossMwmId method. */ return bits::NumUsedBits(osmId.GetOsmId()); } diff --git a/routing/cross_mwm_index_graph.hpp b/routing/cross_mwm_index_graph.hpp index 9c265ee342..24b4ef1995 100644 --- a/routing/cross_mwm_index_graph.hpp +++ b/routing/cross_mwm_index_graph.hpp @@ -167,7 +167,7 @@ private: /// \brief Deserializes connectors for an mwm with |numMwmId|. /// \param fn is a function implementing deserialization. - /// \note Each CrossMwmConnector contained in |m_connectors| may be deserizalize in two stages. + /// \note Each CrossMwmConnector contained in |m_connectors| may be deserialized in two stages. /// The first one is transition deserialization and the second is weight deserialization. /// Transition deserialization is much faster and used more often. template