forked from organicmaps/organicmaps
Passing OsmIdToFeatureIdsMap by const ref.
This commit is contained in:
parent
163fb8b2f6
commit
c67098ae70
3 changed files with 28 additions and 36 deletions
|
@ -17,7 +17,7 @@ using namespace std;
|
|||
namespace
|
||||
{
|
||||
template <typename Obj>
|
||||
void TestDeserializerFromJson(string const & jsonBuffer, shared_ptr<OsmIdToFeatureIdsMap> const & osmIdToFeatureIds,
|
||||
void TestDeserializerFromJson(string const & jsonBuffer, OsmIdToFeatureIdsMap const & osmIdToFeatureIds,
|
||||
string const & name, vector<Obj> const & expected)
|
||||
{
|
||||
my::Json root(jsonBuffer.c_str());
|
||||
|
@ -44,7 +44,7 @@ UNIT_TEST(DeserializerFromJson_TitleAnchors)
|
|||
|
||||
vector<TitleAnchor> expected = {TitleAnchor(11 /* min zoom */, 4 /* anchor */),
|
||||
TitleAnchor(14 /* min zoom */, 6 /* anchor */)};
|
||||
TestDeserializerFromJson(jsonBuffer, make_shared<OsmIdToFeatureIdsMap>(), "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<OsmIdToFeatureIdsMap>();
|
||||
(*mapping)[osm::Id(1234)] = vector<FeatureId>({1});
|
||||
(*mapping)[osm::Id(2345)] = vector<FeatureId>({2});
|
||||
OsmIdToFeatureIdsMap mapping;
|
||||
mapping[osm::Id(1234)] = vector<FeatureId>({1});
|
||||
mapping[osm::Id(2345)] = vector<FeatureId>({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<OsmIdToFeatureIdsMap>();
|
||||
(*mapping)[osm::Id(46116860)] = vector<FeatureId>({0});
|
||||
OsmIdToFeatureIdsMap mapping;
|
||||
mapping[osm::Id(46116860)] = vector<FeatureId>({0});
|
||||
// Note. std::numeric_limits<uint64_t>::max() == 18446744073709551615
|
||||
(*mapping)[osm::Id(18446744073709551615U)] = vector<FeatureId>({2});
|
||||
mapping[osm::Id(18446744073709551615U)] = vector<FeatureId>({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<OsmIdToFeatureIdsMap>(), "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<OsmIdToFeatureIdsMap>(), "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<OsmIdToFeatureIdsMap>(), "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<OsmIdToFeatureIdsMap>(), "shapes", expected);
|
||||
TestDeserializerFromJson(jsonBuffer, OsmIdToFeatureIdsMap(), "shapes", expected);
|
||||
}
|
||||
|
||||
UNIT_TEST(DeserializerFromJson_Networks)
|
||||
|
@ -311,6 +311,6 @@ UNIT_TEST(DeserializerFromJson_Networks)
|
|||
]})";
|
||||
|
||||
vector<Network> const expected = {Network(2 /* network id */, "Минский метрополитен" /* title */)};
|
||||
TestDeserializerFromJson(jsonBuffer, make_shared<OsmIdToFeatureIdsMap>(), "networks", expected);
|
||||
TestDeserializerFromJson(jsonBuffer, OsmIdToFeatureIdsMap(), "networks", expected);
|
||||
}
|
||||
} // namespace
|
||||
|
|
|
@ -85,7 +85,7 @@ string GetFileName(string const & filePath)
|
|||
|
||||
template <class Item>
|
||||
void DeserializeFromJson(my::Json const & root, string const & key,
|
||||
shared_ptr<OsmIdToFeatureIdsMap> const & osmIdToFeatureIdsMap, vector<Item> & items)
|
||||
OsmIdToFeatureIdsMap const & osmIdToFeatureIdsMap, vector<Item> & 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<OsmIdToFeatureIdsMap> const & osmIdToFeatureIdsMap, vector<Gate> & gates)
|
||||
OsmIdToFeatureIdsMap const & osmIdToFeatureIdsMap, vector<Gate> & gates)
|
||||
{
|
||||
DeserializeFromJson(root, "gates", osmIdToFeatureIdsMap, gates);
|
||||
|
||||
|
@ -157,7 +157,7 @@ bool IsValid(vector<Item> const & items)
|
|||
/// \brief Reads from |root| (json) and serializes an array to |serializer|.
|
||||
template <class Item>
|
||||
void SerializeObject(my::Json const & root, string const & key,
|
||||
shared_ptr<OsmIdToFeatureIdsMap> const & osmIdToFeatureIdsMap, Serializer<FileWriter> & serializer)
|
||||
OsmIdToFeatureIdsMap const & osmIdToFeatureIdsMap, Serializer<FileWriter> & serializer)
|
||||
{
|
||||
vector<Item> 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<OsmIdToFeatureIdsMap> 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<OsmIdToFeatureIdsMap>();
|
||||
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|.
|
||||
|
|
|
@ -14,7 +14,6 @@
|
|||
#include <cstdint>
|
||||
#include <cstring>
|
||||
#include <map>
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <type_traits>
|
||||
#include <vector>
|
||||
|
@ -28,7 +27,7 @@ using OsmIdToFeatureIdsMap = std::map<osm::Id, std::vector<FeatureId>>;
|
|||
class DeserializerFromJson
|
||||
{
|
||||
public:
|
||||
DeserializerFromJson(json_struct_t* node, std::shared_ptr<OsmIdToFeatureIdsMap> const & osmIdToFeatureIds);
|
||||
DeserializerFromJson(json_struct_t* node, OsmIdToFeatureIdsMap const & osmIdToFeatureIds);
|
||||
|
||||
template<typename T>
|
||||
typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value || std::is_same<T, double>::value>::type
|
||||
|
@ -89,7 +88,7 @@ private:
|
|||
}
|
||||
|
||||
json_struct_t * m_node;
|
||||
std::shared_ptr<OsmIdToFeatureIdsMap> m_osmIdToFeatureIds;
|
||||
OsmIdToFeatureIdsMap const & m_osmIdToFeatureIds;
|
||||
};
|
||||
|
||||
/// \brief Builds the transit section in the mwm.
|
||||
|
|
Loading…
Add table
Reference in a new issue