diff --git a/depends/jsoncpp/jsoncpp-ex.h b/depends/jsoncpp/jsoncpp-ex.h new file mode 100644 index 000000000..fc1174133 --- /dev/null +++ b/depends/jsoncpp/jsoncpp-ex.h @@ -0,0 +1,31 @@ +#include "jsoncpp.h" +#pragma once + +namespace JsonEx { + + template bool is (const Json::Value &val) { return false; } + template T as (const Json::Value &val); + template T get (const Json::Value &val, const std::string &key, const T &default_) { return default_; } + +#define define_helpers(type, is_func, as_func) \ + template<> inline bool is (const Json::Value &val) { return val.is_func(); } \ + template<> inline type as (const Json::Value &val) { return val.as_func(); } \ + template<> inline type get (const Json::Value &val, const std::string &key, const type &default_) \ + { Json::Value x = val[key]; return is(x) ? as(x) : default_; } + define_helpers(bool, isBool, asBool); + define_helpers(Json::Int, isInt, asInt); + define_helpers(Json::UInt, isUInt, asUInt); + define_helpers(Json::Int64, isInt64, asInt64); + define_helpers(Json::UInt64, isUInt64, asUInt64); + define_helpers(float, isDouble, asFloat); + define_helpers(double, isDouble, asDouble); + define_helpers(std::string, isString, asString); +#undef define_helpers + + inline std::string toSimpleString (const Json::Value &val) + { + Json::FastWriter w; + return w.write(val); + } + +}