Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Byko-Ianko <v.bykoianko@corp.mail.ru>2017-10-27 09:31:03 +0300
committerDaria Volvenkova <d.volvenkova@corp.mail.ru>2017-10-27 16:04:18 +0300
commita5dec24c5262c806d48f103daf9f76e8fa85b061 (patch)
treec77e46daa202a596428142b8ba33f2bdf89752cd
parent500cefe59f84c34318852ac031b46a9a410843db (diff)
Any class from transit types may be present as json dictionary (object).
-rw-r--r--generator/transit_generator.cpp19
-rw-r--r--generator/transit_generator.hpp27
2 files changed, 23 insertions, 23 deletions
diff --git a/generator/transit_generator.cpp b/generator/transit_generator.cpp
index a7ab686d63..130c6be904 100644
--- a/generator/transit_generator.cpp
+++ b/generator/transit_generator.cpp
@@ -189,12 +189,17 @@ DeserializerFromJson::DeserializerFromJson(json_struct_t* node,
void DeserializerFromJson::operator()(m2::PointD & p, char const * name)
{
- GetTwoParamDict(name, "x", "y", p.x, p.y);
-}
-
-void DeserializerFromJson::operator()(ShapeId & id, char const * name)
-{
- GetTwoParamDict(name, "stop1_id", "stop2_id", id.m_stop1Id, id.m_stop2Id);
+ // @todo(bykoianko) Instead of having a special operator() method for m2::PointD class it's necessary to
+ // add Point class to transit_types.hpp and process it in DeserializerFromJson with regular method.
+ json_t * item = nullptr;
+ if (name == nullptr)
+ item = m_node; // Array item case
+ else
+ item = my::GetJSONObligatoryField(m_node, name);
+
+ CHECK(json_is_object(item), ());
+ FromJSONObject(item, "x", p.x);
+ FromJSONObject(item, "y", p.y);
}
void DeserializerFromJson::operator()(FeatureIdentifiers & id, char const * name)
@@ -207,7 +212,7 @@ void DeserializerFromJson::operator()(FeatureIdentifiers & id, char const * name
CHECK(strings::to_uint64(osmIdStr, osmIdNum), ());
osm::Id const osmId(osmIdNum);
auto const it = m_osmIdToFeatureIds.find(osmId);
- CHECK(it != m_osmIdToFeatureIds.cend(), ());
+ CHECK(it != m_osmIdToFeatureIds.cend(), ("osm id:", osmId.EncodedId(), "size of m_osmIdToFeatureIds:", m_osmIdToFeatureIds.size()));
CHECK_EQUAL(it->second.size(), 1,
("Osm id:", osmId, "from transit graph doesn't present by a single feature in mwm."));
id.SetFeatureId(it->second[0]);
diff --git a/generator/transit_generator.hpp b/generator/transit_generator.hpp
index ca57bf3ec7..686f6b690d 100644
--- a/generator/transit_generator.hpp
+++ b/generator/transit_generator.hpp
@@ -38,7 +38,6 @@ public:
void operator()(std::string & s, char const * name = nullptr) { GetField(s, name); }
void operator()(m2::PointD & p, char const * name = nullptr);
- void operator()(ShapeId & id, char const * name = nullptr);
void operator()(FeatureIdentifiers & id, char const * name = nullptr);
void operator()(StopIdRanges & rs, char const * name = nullptr);
@@ -63,26 +62,22 @@ public:
template<typename T>
typename std::enable_if<std::is_class<T>::value>::type operator()(T & t, char const * name = nullptr)
{
+ if (name != nullptr && json_is_object(m_node))
+ {
+ json_t * dictNode = my::GetJSONOptionalField(m_node, name);
+ if (dictNode == nullptr)
+ return; // No the node in json.
+
+ DeserializerFromJson dict(dictNode, m_osmIdToFeatureIds);
+ t.Visit(dict);
+ return;
+ }
+
t.Visit(*this);
}
private:
template <typename T>
- void GetTwoParamDict(char const * dictName, std::string const & paramName1,
- std::string const & paramName2, T & val1, T & val2)
- {
- json_t * item = nullptr;
- if (dictName == nullptr)
- item = m_node; // Array item case
- else
- item = my::GetJSONObligatoryField(m_node, dictName);
-
- CHECK(json_is_object(item), ());
- FromJSONObject(item, paramName1, val1);
- FromJSONObject(item, paramName2, val2);
- }
-
- template <typename T>
void GetField(T & t, char const * name = nullptr)
{
if (name == nullptr)