diff --git a/generator/generator_tests/transit_test.cpp b/generator/generator_tests/transit_test.cpp index da8c5f693f..93c0d7776b 100644 --- a/generator/generator_tests/transit_test.cpp +++ b/generator/generator_tests/transit_test.cpp @@ -17,7 +17,7 @@ using namespace std; namespace { template -void TestDeserializerFromJson(string const & jsonBuffer, shared_ptr const & osmIdToFeatureIds, +void TestDeserializerFromJson(string const & jsonBuffer, OsmIdToFeatureIdsMap const & osmIdToFeatureIds, string const & name, vector const & expected) { my::Json root(jsonBuffer.c_str()); @@ -44,7 +44,7 @@ UNIT_TEST(DeserializerFromJson_TitleAnchors) vector expected = {TitleAnchor(11 /* min zoom */, 4 /* anchor */), TitleAnchor(14 /* min zoom */, 6 /* anchor */)}; - TestDeserializerFromJson(jsonBuffer, make_shared(), "title_anchors", expected); + TestDeserializerFromJson(jsonBuffer, OsmIdToFeatureIdsMap(), "title_anchors", expected); } UNIT_TEST(DeserializerFromJson_Stops) @@ -90,9 +90,9 @@ UNIT_TEST(DeserializerFromJson_Stops) {19213568, 19213569} /* lineIds */, {27.5227942, 64.25206634443111} /* point */, {TitleAnchor(12 /* min zoom */, 0 /* anchor */), TitleAnchor(15, 9)})}; - auto mapping = make_shared(); - (*mapping)[osm::Id(1234)] = vector({1}); - (*mapping)[osm::Id(2345)] = vector({2}); + OsmIdToFeatureIdsMap mapping; + mapping[osm::Id(1234)] = vector({1}); + mapping[osm::Id(2345)] = vector({2}); TestDeserializerFromJson(jsonBuffer, mapping, "stops", expected); } @@ -131,10 +131,10 @@ UNIT_TEST(DeserializerFromJson_Gates) Gate(2 /* feature id */, true /* entrance */, true /* exit */, 60.0 /* weight */, {442018465} /* stop ids */, {43.9290544, 68.41120791512581} /* point */)}; - auto mapping = make_shared(); - (*mapping)[osm::Id(46116860)] = vector({0}); + OsmIdToFeatureIdsMap mapping; + mapping[osm::Id(46116860)] = vector({0}); // Note. std::numeric_limits::max() == 18446744073709551615 - (*mapping)[osm::Id(18446744073709551615U)] = vector({2}); + mapping[osm::Id(18446744073709551615U)] = vector({2}); TestDeserializerFromJson(jsonBuffer, mapping, "gates", expected); } @@ -166,7 +166,7 @@ UNIT_TEST(DeserializerFromJson_Edges) Edge(442018445 /* stop 1 id */, 442018446 /* stop 2 id */, 345.6 /* weight */, 72551680 /* line id */, false /* transfer */, {} /* shape ids */)}; - TestDeserializerFromJson(jsonBuffer, make_shared(), "edges", expected); + TestDeserializerFromJson(jsonBuffer, OsmIdToFeatureIdsMap(), "edges", expected); } UNIT_TEST(DeserializerFromJson_Transfers) @@ -191,7 +191,7 @@ UNIT_TEST(DeserializerFromJson_Transfers) Transfer(922337203 /* stop id */, {27.5619844, 64.24325959173672} /* point */, {209186416, 277039518} /* stopIds */, {} /* anchors */)}; - TestDeserializerFromJson(jsonBuffer, make_shared(), "transfers", expected); + TestDeserializerFromJson(jsonBuffer, OsmIdToFeatureIdsMap(), "transfers", expected); } UNIT_TEST(DeserializerFromJson_Lines) @@ -239,7 +239,7 @@ UNIT_TEST(DeserializerFromJson_Lines) {246659391, 246659390, 209191855, 209191854, 209191853, 209191852, 209191851} /* stop ids */)}; - TestDeserializerFromJson(jsonBuffer, make_shared(), "lines", expected); + TestDeserializerFromJson(jsonBuffer, OsmIdToFeatureIdsMap(), "lines", expected); } UNIT_TEST(DeserializerFromJson_Shapes) @@ -296,7 +296,7 @@ UNIT_TEST(DeserializerFromJson_Shapes) {m2::PointD(27.554025800000002, 64.250591911669844), m2::PointD(27.553906184631536, 64.250633404586054)} /* polyline */)}; - TestDeserializerFromJson(jsonBuffer, make_shared(), "shapes", expected); + TestDeserializerFromJson(jsonBuffer, OsmIdToFeatureIdsMap(), "shapes", expected); } UNIT_TEST(DeserializerFromJson_Networks) @@ -311,6 +311,6 @@ UNIT_TEST(DeserializerFromJson_Networks) ]})"; vector const expected = {Network(2 /* network id */, "Минский метрополитен" /* title */)}; - TestDeserializerFromJson(jsonBuffer, make_shared(), "networks", expected); + TestDeserializerFromJson(jsonBuffer, OsmIdToFeatureIdsMap(), "networks", expected); } } // namespace diff --git a/generator/transit_generator.cpp b/generator/transit_generator.cpp index dd7b26cbef..96605c5916 100644 --- a/generator/transit_generator.cpp +++ b/generator/transit_generator.cpp @@ -85,7 +85,7 @@ string GetFileName(string const & filePath) template void DeserializeFromJson(my::Json const & root, string const & key, - shared_ptr const & osmIdToFeatureIdsMap, vector & items) + OsmIdToFeatureIdsMap const & osmIdToFeatureIdsMap, vector & items) { items.clear(); DeserializerFromJson deserializer(root.get(), osmIdToFeatureIdsMap); @@ -93,7 +93,7 @@ void DeserializeFromJson(my::Json const & root, string const & key, } void DeserializeGatesFromJson(my::Json const & root, string const & mwmDir, string const & countryId, - shared_ptr const & osmIdToFeatureIdsMap, vector & gates) + OsmIdToFeatureIdsMap const & osmIdToFeatureIdsMap, vector & gates) { DeserializeFromJson(root, "gates", osmIdToFeatureIdsMap, gates); @@ -157,7 +157,7 @@ bool IsValid(vector const & items) /// \brief Reads from |root| (json) and serializes an array to |serializer|. template void SerializeObject(my::Json const & root, string const & key, - shared_ptr const & osmIdToFeatureIdsMap, Serializer & serializer) + OsmIdToFeatureIdsMap const & osmIdToFeatureIdsMap, Serializer & serializer) { vector items; DeserializeFromJson(root, key, osmIdToFeatureIdsMap, items); @@ -198,6 +198,12 @@ namespace routing namespace transit { // DeserializerFromJson --------------------------------------------------------------------------- +DeserializerFromJson::DeserializerFromJson(json_struct_t* node, + OsmIdToFeatureIdsMap const & osmIdToFeatureIds) + : m_node(node), m_osmIdToFeatureIds(osmIdToFeatureIds) +{ +} + void DeserializerFromJson::operator()(m2::PointD & p, char const * name) { json_t * pointItem = nullptr; @@ -220,20 +226,13 @@ void DeserializerFromJson::operator()(OsmId & osmId, char const * name) uint64_t osmIdNum; CHECK(strings::to_uint64(osmIdStr.c_str(), osmIdNum), ()); osm::Id const id(osmIdNum); - auto const it = m_osmIdToFeatureIds->find(id); - CHECK(it != m_osmIdToFeatureIds->cend(), ()); + auto const it = m_osmIdToFeatureIds.find(id); + CHECK(it != m_osmIdToFeatureIds.cend(), ()); CHECK_EQUAL(it->second.size(), 1, ("Osm id:", id, "from transit graph doesn't present by a single feature in mwm.")); osmId = OsmId(it->second[0]); } -DeserializerFromJson::DeserializerFromJson(json_struct_t * node, - shared_ptr const & osmIdToFeatureIds) - : m_node(node), m_osmIdToFeatureIds(osmIdToFeatureIds) -{ - CHECK(m_osmIdToFeatureIds, ()); -} - void BuildTransit(string const & mwmPath, string const & osmIdsToFeatureIdPath, string const & transitDir) { @@ -268,17 +267,11 @@ void BuildTransit(string const & mwmPath, string const & osmIdsToFeatureIdPath, LOG(LCRITICAL, ("Can't open", graphFullPath, ex.what())); } - // @TODO(bykoianko) If it's necessary to parse an integer jansson parser keeps it in long long value. - // It's not good because osm id and stop id are uint64_t. This should be solved before continue writing - // transit jansson parsing. According to C++ signed long long is not smaller than long and is at least 64 bits. - // So as a variant before saving to json osm id and stop id should be converted to signed long long and - // then after reading at generator they should be converted back. - // @TODO(bykoianko) |osmId| should be converted to feature id while deserialing from json. my::Json root(jsonBuffer.c_str()); CHECK(root.get() != nullptr, ("Cannot parse the json file:", graphFullPath)); - auto mapping = make_shared(); - FillOsmIdToFeatureIdMap(osmIdsToFeatureIdPath, *mapping); + OsmIdToFeatureIdsMap mapping; + FillOsmIdToFeatureIdMap(osmIdsToFeatureIdPath, mapping); // Note. |gates| has to be deserialized from json before starting writing transit section to mwm since // the mwm is used to filled |gates|. diff --git a/generator/transit_generator.hpp b/generator/transit_generator.hpp index a9aefaec09..8d3d1fa3ec 100644 --- a/generator/transit_generator.hpp +++ b/generator/transit_generator.hpp @@ -14,7 +14,6 @@ #include #include #include -#include #include #include #include @@ -28,7 +27,7 @@ using OsmIdToFeatureIdsMap = std::map>; class DeserializerFromJson { public: - DeserializerFromJson(json_struct_t* node, std::shared_ptr const & osmIdToFeatureIds); + DeserializerFromJson(json_struct_t* node, OsmIdToFeatureIdsMap const & osmIdToFeatureIds); template typename std::enable_if::value || std::is_enum::value || std::is_same::value>::type @@ -89,7 +88,7 @@ private: } json_struct_t * m_node; - std::shared_ptr m_osmIdToFeatureIds; + OsmIdToFeatureIdsMap const & m_osmIdToFeatureIds; }; /// \brief Builds the transit section in the mwm.