From 9e24ab84e209693da87049c5e5bb233520340ebe Mon Sep 17 00:00:00 2001 From: Vladimir Byko-Ianko Date: Thu, 10 Mar 2016 15:18:28 +0300 Subject: [PATCH] Moving FromJSONObject functions to 3party/jansson/myjansson unit. --- 3party/jansson/jansson.pro | 1 + 3party/jansson/myjansson.cpp | 40 +++++++++ 3party/jansson/myjansson.hpp | 22 +++++ search/search_quality/sample.cpp | 150 +++++++++++-------------------- 4 files changed, 113 insertions(+), 100 deletions(-) create mode 100644 3party/jansson/myjansson.cpp diff --git a/3party/jansson/jansson.pro b/3party/jansson/jansson.pro index 09b8a6dfcd..c7f5608f6c 100644 --- a/3party/jansson/jansson.pro +++ b/3party/jansson/jansson.pro @@ -19,6 +19,7 @@ SOURCES += \ src/error.c \ src/strconv.c \ jansson_handle.cpp \ + myjansson.cpp \ HEADERS += \ myjansson.hpp \ diff --git a/3party/jansson/myjansson.cpp b/3party/jansson/myjansson.cpp new file mode 100644 index 0000000000..c91c9ea420 --- /dev/null +++ b/3party/jansson/myjansson.cpp @@ -0,0 +1,40 @@ +#include "3party/jansson/myjansson.hpp" + +namespace my +{ +void FromJSON(json_t * root, string & result) +{ + result = string(json_string_value(root)); +} + +void FromJSONObject(json_t * root, string const & field, string & result) +{ + if (!json_is_object(root)) + MYTHROW(my::Json::Exception, ("Bad json object when parsing", field)); + json_t * val = json_object_get(root, field.c_str()); + if (!val) + MYTHROW(my::Json::Exception, ("Obligatory field", field, "is absent.")); + if (!json_is_string(val)) + MYTHROW(my::Json::Exception, ("The field", field, "must contain a json string.")); + result = string(json_string_value(val)); +} + +void FromJSONObject(json_t * root, string const & field, strings::UniString & result) +{ + string s; + FromJSONObject(root, field, s); + result = strings::MakeUniString(s); +} + +void FromJSONObject(json_t * root, string const & field, double & result) +{ + if (!json_is_object(root)) + MYTHROW(my::Json::Exception, ("Bad json object when parsing", field)); + json_t * val = json_object_get(root, field.c_str()); + if (!val) + MYTHROW(my::Json::Exception, ("Obligatory field", field, "is absent.")); + if (!json_is_number(val)) + MYTHROW(my::Json::Exception, ("The field", field, "must contain a json number.")); + result = json_number_value(val); +} +} // namespace my diff --git a/3party/jansson/myjansson.hpp b/3party/jansson/myjansson.hpp index cb8fc07770..3c918b8ecf 100644 --- a/3party/jansson/myjansson.hpp +++ b/3party/jansson/myjansson.hpp @@ -3,9 +3,12 @@ #include "jansson_handle.hpp" #include "base/exception.hpp" +#include "base/string_utils.hpp" #include +#include "std/vector.hpp" + namespace my { class Json @@ -25,4 +28,23 @@ public: json_t * get() const { return m_handle.get(); } }; + +void FromJSON(json_t * root, string & result); +void FromJSONObject(json_t * root, string const & field, string & result); +void FromJSONObject(json_t * root, string const & field, strings::UniString & result); +void FromJSONObject(json_t * root, string const & field, double & result); + +template +void FromJSONObject(json_t * root, string const & field, vector & result) +{ + json_t * arr = json_object_get(root, field.c_str()); + if (!arr) + MYTHROW(my::Json::Exception, ("Obligatory field", field, "is absent.")); + if (!json_is_array(arr)) + MYTHROW(my::Json::Exception, ("The field", field, "must contain a json array.")); + size_t sz = json_array_size(arr); + result.resize(sz); + for (size_t i = 0; i < sz; ++i) + FromJSON(json_array_get(arr, i), result[i]); +} } // namespace my diff --git a/search/search_quality/sample.cpp b/search/search_quality/sample.cpp index 80b8f01775..9528ad63d2 100644 --- a/search/search_quality/sample.cpp +++ b/search/search_quality/sample.cpp @@ -9,108 +9,10 @@ #include "3party/jansson/myjansson.hpp" +using namespace my; + namespace { -void FromJSON(json_t * root, string & result) -{ - result = string(json_string_value(root)); -} - -void FromJSONObject(json_t * root, string const & field, string & result) -{ - if (!json_is_object(root)) - MYTHROW(my::Json::Exception, ("Bad json object when parsing", field)); - json_t * val = json_object_get(root, field.c_str()); - if (!val) - MYTHROW(my::Json::Exception, ("Obligatory field", field, "is absent.")); - if (!json_is_string(val)) - MYTHROW(my::Json::Exception, ("The field", field, "must contain a json string.")); - result = string(json_string_value(val)); -} - -void FromJSONObject(json_t * root, string const & field, strings::UniString & result) -{ - string s; - FromJSONObject(root, field, s); - result = strings::MakeUniString(s); -} - -void FromJSONObject(json_t * root, string const & field, double & result) -{ - if (!json_is_object(root)) - MYTHROW(my::Json::Exception, ("Bad json object when parsing", field)); - json_t * val = json_object_get(root, field.c_str()); - if (!val) - MYTHROW(my::Json::Exception, ("Obligatory field", field, "is absent.")); - if (!json_is_number(val)) - MYTHROW(my::Json::Exception, ("The field", field, "must contain a json number.")); - result = json_number_value(val); -} - -void FromJSONObject(json_t * root, string const & field, m2::PointD & result) -{ - if (!json_is_object(root)) - MYTHROW(my::Json::Exception, ("Bad json object when parsing", field)); - json_t * val = json_object_get(root, field.c_str()); - if (!val) - MYTHROW(my::Json::Exception, ("Obligatory field", field, "is absent.")); - FromJSONObject(val, "x", result.x); - FromJSONObject(val, "y", result.y); -} - -void FromJSONObject(json_t * root, string const & field, m2::RectD & result) -{ - json_t * rect = json_object_get(root, field.c_str()); - if (!rect) - MYTHROW(my::Json::Exception, ("Obligatory field", field, "is absent.")); - double minX, minY, maxX, maxY; - FromJSONObject(rect, "minx", minX); - FromJSONObject(rect, "miny", minY); - FromJSONObject(rect, "maxx", maxX); - FromJSONObject(rect, "maxy", maxY); - result.setMinX(minX); - result.setMinY(minY); - result.setMaxX(maxX); - result.setMaxY(maxY); -} - -void FromJSONObject(json_t * root, string const & field, search::Sample::Result::Relevance & r) -{ - string relevance; - FromJSONObject(root, field, relevance); - if (relevance == "vital") - r = search::Sample::Result::Relevance::RELEVANCE_VITAL; - else if (relevance == "relevant") - r = search::Sample::Result::Relevance::RELEVANCE_RELEVANT; - else - r = search::Sample::Result::Relevance::RELEVANCE_IRRELEVANT; -} - -void FromJSON(json_t * root, search::Sample::Result & result); - -template -void FromJSONObject(json_t * root, string const & field, vector & result) -{ - json_t * arr = json_object_get(root, field.c_str()); - if (!arr) - MYTHROW(my::Json::Exception, ("Obligatory field", field, "is absent.")); - if (!json_is_array(arr)) - MYTHROW(my::Json::Exception, ("The field", field, "must contain a json array.")); - size_t sz = json_array_size(arr); - result.resize(sz); - for (size_t i = 0; i < sz; ++i) - FromJSON(json_array_get(arr, i), result[i]); -} - -void FromJSON(json_t * root, search::Sample::Result & result) -{ - FromJSONObject(root, "position", result.m_pos); - FromJSONObject(root, "name", result.m_name); - FromJSONObject(root, "houseNumber", result.m_houseNumber); - FromJSONObject(root, "types", result.m_types); - FromJSONObject(root, "relevancy", result.m_relevance); -} - bool LessRect(m2::RectD const & lhs, m2::RectD const & rhs) { if (lhs.minX() != rhs.minX()) @@ -141,6 +43,54 @@ bool Equal(vector lhs, vector rhs) } } // namespace +void FromJSONObject(json_t * root, string const & field, m2::RectD & result) +{ + json_t * rect = json_object_get(root, field.c_str()); + if (!rect) + MYTHROW(my::Json::Exception, ("Obligatory field", field, "is absent.")); + double minX, minY, maxX, maxY; + FromJSONObject(rect, "minx", minX); + FromJSONObject(rect, "miny", minY); + FromJSONObject(rect, "maxx", maxX); + FromJSONObject(rect, "maxy", maxY); + result.setMinX(minX); + result.setMinY(minY); + result.setMaxX(maxX); + result.setMaxY(maxY); +} + +void FromJSONObject(json_t * root, string const & field, m2::PointD & result) +{ + if (!json_is_object(root)) + MYTHROW(my::Json::Exception, ("Bad json object when parsing", field)); + json_t * val = json_object_get(root, field.c_str()); + if (!val) + MYTHROW(my::Json::Exception, ("Obligatory field", field, "is absent.")); + FromJSONObject(val, "x", result.x); + FromJSONObject(val, "y", result.y); +} + +void FromJSONObject(json_t * root, string const & field, search::Sample::Result::Relevance & r) +{ + string relevance; + FromJSONObject(root, field, relevance); + if (relevance == "vital") + r = search::Sample::Result::Relevance::RELEVANCE_VITAL; + else if (relevance == "relevant") + r = search::Sample::Result::Relevance::RELEVANCE_RELEVANT; + else + r = search::Sample::Result::Relevance::RELEVANCE_IRRELEVANT; +} + +void FromJSON(json_t * root, search::Sample::Result & result) +{ + FromJSONObject(root, "position", result.m_pos); + FromJSONObject(root, "name", result.m_name); + FromJSONObject(root, "houseNumber", result.m_houseNumber); + FromJSONObject(root, "types", result.m_types); + FromJSONObject(root, "relevancy", result.m_relevance); +} + namespace search { bool Sample::Result::operator<(Sample::Result const & rhs) const