From 6d3583c937b1878c8f796e659ef03d038cde17ab Mon Sep 17 00:00:00 2001 From: Yuri Gorshenin Date: Wed, 19 Apr 2017 13:51:25 +0300 Subject: [build] Various fixes to master build. --- 3party/jansson/myjansson.cpp | 64 ++++++++++++++++++++++++++++++++------------ 3party/jansson/myjansson.hpp | 9 ++++--- 2 files changed, 53 insertions(+), 20 deletions(-) (limited to '3party') diff --git a/3party/jansson/myjansson.cpp b/3party/jansson/myjansson.cpp index 3e1b0d3f75..0b853747da 100644 --- a/3party/jansson/myjansson.cpp +++ b/3party/jansson/myjansson.cpp @@ -1,7 +1,38 @@ #include "3party/jansson/myjansson.hpp" +#include + using namespace std; +namespace +{ +template +typename enable_if::value, void>::type ReadIntegral(json_t * root, + string const & field, T & result) +{ + auto * val = my::GetJSONObligatoryField(root, field); + if (!json_is_number(val)) + MYTHROW(my::Json::Exception, ("The field", field, "must contain a json number.")); + result = static_cast(json_integer_value(val)); +} + +template +typename enable_if::value, void>::type ReadIntegralOptional(json_t * root, + string const & field, + T & result) +{ + auto * val = my::GetJSONOptionalField(root, field); + if (!val) + { + result = 0; + return; + } + if (!json_is_number(val)) + MYTHROW(my::Json::Exception, ("The field", field, "must contain a json number.")); + result = static_cast(json_integer_value(val)); +} +} // namespace + namespace my { json_t * GetJSONObligatoryField(json_t * root, std::string const & field) @@ -28,25 +59,24 @@ void FromJSONObject(json_t * root, string const & field, double & result) result = json_number_value(val); } -void FromJSONObject(json_t * root, string const & field, json_int_t & result) +void FromJSONObject(json_t * root, string const & field, int & result) { - auto * val = my::GetJSONObligatoryField(root, field); - if (!json_is_number(val)) - MYTHROW(my::Json::Exception, ("The field", field, "must contain a json number.")); - result = json_integer_value(val); + ReadIntegral(root, field, result); } -void FromJSONObjectOptionalField(json_t * root, string const & field, json_int_t & result) +void FromJSONObject(json_t * root, string const & field, int64_t & result) { - auto * val = my::GetJSONOptionalField(root, field); - if (!val) - { - result = 0; - return; - } - if (!json_is_number(val)) - MYTHROW(my::Json::Exception, ("The field", field, "must contain a json number.")); - result = json_integer_value(val); + ReadIntegral(root, field, result); +} + +void FromJSONObjectOptionalField(json_t * root, string const & field, int & result) +{ + ReadIntegralOptional(root, field, result); +} + +void FromJSONObjectOptionalField(json_t * root, string const & field, int64_t & result) +{ + ReadIntegralOptional(root, field, result); } void FromJSONObjectOptionalField(json_t * root, string const & field, double & result) @@ -95,10 +125,10 @@ void ToJSONObject(json_t & root, string const & field, double value) void ToJSONObject(json_t & root, string const & field, int value) { - json_object_set_new(&root, field.c_str(), json_integer(value)); + ToJSONObject(root, field, static_cast(value)); } -void ToJSONObject(json_t & root, std::string const & field, json_int_t value) +void ToJSONObject(json_t & root, std::string const & field, int64_t value) { json_object_set_new(&root, field.c_str(), json_integer(value)); } diff --git a/3party/jansson/myjansson.hpp b/3party/jansson/myjansson.hpp index 3945675e8a..7b68c4211e 100644 --- a/3party/jansson/myjansson.hpp +++ b/3party/jansson/myjansson.hpp @@ -5,6 +5,7 @@ #include "base/exception.hpp" #include "base/string_utils.hpp" +#include #include #include #include @@ -49,9 +50,11 @@ json_t * GetJSONOptionalField(json_t * root, std::string const & field); inline void FromJSON(json_t * root, json_t *& value) { value = root; } void FromJSONObject(json_t * root, std::string const & field, double & result); -void FromJSONObject(json_t * root, std::string const & field, json_int_t & result); +void FromJSONObject(json_t * root, std::string const & field, int & result); +void FromJSONObject(json_t * root, std::string const & field, int64_t & result); -void FromJSONObjectOptionalField(json_t * root, std::string const & field, json_int_t & result); +void FromJSONObjectOptionalField(json_t * root, std::string const & field, int & result); +void FromJSONObjectOptionalField(json_t * root, std::string const & field, int64_t & result); void FromJSONObjectOptionalField(json_t * root, std::string const & field, double & result); void FromJSONObjectOptionalField(json_t * root, std::string const & field, bool & result, bool def = false); @@ -59,7 +62,7 @@ void FromJSONObjectOptionalField(json_t * root, std::string const & field, json_ void ToJSONObject(json_t & root, std::string const & field, double value); void ToJSONObject(json_t & root, std::string const & field, int value); -void ToJSONObject(json_t & root, std::string const & field, json_int_t value); +void ToJSONObject(json_t & root, std::string const & field, int64_t value); void FromJSON(json_t * root, std::string & result); inline my::JSONPtr ToJSON(std::string const & s) { return my::NewJSONString(s); } -- cgit v1.2.3