diff options
author | Yuri Gorshenin <y@maps.me> | 2017-04-19 13:51:25 +0300 |
---|---|---|
committer | Vladimir Byko-Ianko <bykoianko@gmail.com> | 2017-04-19 15:08:21 +0300 |
commit | 6d3583c937b1878c8f796e659ef03d038cde17ab (patch) | |
tree | 79e92b416ac471e93ac7024c294419afba84822f /3party | |
parent | acd974ec22d3a49785412bfcc2b602277156b4c9 (diff) |
[build] Various fixes to master build.
Diffstat (limited to '3party')
-rw-r--r-- | 3party/jansson/myjansson.cpp | 64 | ||||
-rw-r--r-- | 3party/jansson/myjansson.hpp | 9 |
2 files changed, 53 insertions, 20 deletions
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 <type_traits> + using namespace std; +namespace +{ +template <typename T> +typename enable_if<is_integral<T>::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<T>(json_integer_value(val)); +} + +template <typename T> +typename enable_if<is_integral<T>::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<T>(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<int64_t>(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 <cstdint> #include <memory> #include <string> #include <vector> @@ -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); } |