Go to the documentation of this file.
4 #ifndef XGBOOST_JSON_H_
5 #define XGBOOST_JSON_H_
7 #include <xgboost/logging.h>
47 virtual ~Value() =
default;
65 return T::IsClassOf(value);
68 template <
typename T,
typename U>
71 return dynamic_cast<T*
>(value);
73 LOG(FATAL) <<
"Invalid cast, from " + value->TypeStr() +
" to " + T().TypeStr();
75 return dynamic_cast<T*
>(value);
90 void Save(JsonWriter* writer)
override;
92 Json&
operator[](std::string
const & key)
override;
96 std::string
const&
GetString() const & {
return str_; }
108 std::vector<Json> vec_;
119 void Save(JsonWriter* writer)
override;
121 Json&
operator[](std::string
const & key)
override;
124 std::vector<Json>
const&
GetArray() && {
return vec_; }
125 std::vector<Json>
const&
GetArray() const & {
return vec_; }
137 std::map<std::string, Json> object_;
141 JsonObject(std::map<std::string, Json>&&
object);
150 std::map<std::string, Json>
const&
GetObject() && {
return object_; }
151 std::map<std::string, Json>
const&
GetObject() const & {
return object_; }
152 std::map<std::string, Json> &
GetObject() & {
return object_; }
172 template <
typename FloatT,
173 typename std::enable_if<std::is_same<FloatT, Float>::value>::type* =
nullptr>
177 template <
typename FloatT,
178 typename std::enable_if<std::is_same<FloatT, double>::value>::type* =
nullptr>
180 number_{
static_cast<Float>(value)} {}
184 void Save(JsonWriter* writer)
override;
186 Json&
operator[](std::string
const & key)
override;
211 template <
typename IntT,
212 typename std::enable_if<std::is_same<IntT, Int>::value>::type* =
nullptr>
214 template <
typename IntT,
215 typename std::enable_if<std::is_same<IntT, size_t>::value>::type* =
nullptr>
217 integer_{
static_cast<Int>(value)} {}
218 template <
typename IntT,
219 typename std::enable_if<std::is_same<IntT, int32_t>::value>::type* =
nullptr>
221 integer_{
static_cast<Int>(value)} {}
222 template <
typename IntT,
223 typename std::enable_if<
224 std::is_same<IntT, uint32_t>::value &&
225 !std::is_same<std::size_t, uint32_t>::value>::type * =
nullptr>
228 integer_{
static_cast<Int>(value)} {}
233 Json&
operator[](std::string
const & key)
override;
270 bool boolean_ =
false;
275 template <
typename Bool,
276 typename std::enable_if<
277 std::is_same<Bool, bool>::value ||
278 std::is_same<Bool, bool const>::value>::type* =
nullptr>
284 void Save(JsonWriter* writer)
override;
286 Json&
operator[](std::string
const & key)
override;
312 CharT
const&
at(
size_t p)
const {
316 size_t size()
const {
return size_; }
321 std::string
substr(
size_t beg,
size_t n)
const {
322 CHECK_LE(beg, size_);
323 return std::string {str_ + beg, n < (size_ - beg) ? n : (size_ - beg)};
325 char const*
c_str()
const {
return str_; }
353 static void Dump(
Json json, std::string* out);
360 ptr_.reset(
new JsonNumber(std::move(number)));
375 ptr_.reset(
new JsonArray(std::move(array)));
383 ptr_.reset(
new JsonObject(std::move(
object)));
402 ptr_{
new JsonNull(std::move(
null))} {}
404 ptr_.reset(
new JsonNull(std::move(
null)));
412 Json(
Json&& other) : ptr_{std::move(other.ptr_)} {}
414 ptr_ = std::move(other.ptr_);
429 return *ptr_ == *(rhs.ptr_);
443 template <
typename T>
452 template <
typename T,
453 typename std::enable_if<
454 std::is_same<T, JsonNumber>::value>::type* =
nullptr>
456 return val.GetNumber();
458 template <
typename T,
459 typename std::enable_if<
460 std::is_same<T, JsonNumber const>::value>::type* =
nullptr>
462 return val.GetNumber();
466 template <
typename T,
467 typename std::enable_if<
468 std::is_same<T, JsonInteger>::value>::type* =
nullptr>
470 return val.GetInteger();
472 template <
typename T,
473 typename std::enable_if<
474 std::is_same<T, JsonInteger const>::value>::type* =
nullptr>
476 return val.GetInteger();
480 template <
typename T,
481 typename std::enable_if<
482 std::is_same<T, JsonString>::value>::type* =
nullptr>
484 return val.GetString();
486 template <
typename T,
487 typename std::enable_if<
488 std::is_same<T, JsonString const>::value>::type* =
nullptr>
490 return val.GetString();
494 template <
typename T,
495 typename std::enable_if<
496 std::is_same<T, JsonBoolean>::value>::type* =
nullptr>
498 return val.GetBoolean();
500 template <
typename T,
501 typename std::enable_if<
502 std::is_same<T, JsonBoolean const>::value>::type* =
nullptr>
504 return val.GetBoolean();
508 template <
typename T,
509 typename std::enable_if<
510 std::is_same<T, JsonArray>::value>::type* =
nullptr>
512 return val.GetArray();
514 template <
typename T,
515 typename std::enable_if<
516 std::is_same<T, JsonArray const>::value>::type* =
nullptr>
518 return val.GetArray();
522 template <
typename T,
523 typename std::enable_if<
524 std::is_same<T, JsonObject>::value>::type* =
nullptr>
525 std::map<std::string, Json>&
GetImpl(T& val) {
526 return val.GetObject();
528 template <
typename T,
529 typename std::enable_if<
530 std::is_same<T, JsonObject const>::value>::type* =
nullptr>
531 std::map<std::string, Json>
const&
GetImpl(T& val) {
532 return val.GetObject();
545 template <
typename T,
typename U>
547 auto& value = *Cast<T>(&json.GetValue());
561 template <
typename Parameter>
564 for (
auto const& kv : param.__DICT__()) {
565 obj[kv.first] = kv.second;
570 template <
typename Parameter>
572 auto const& j_param = get<Object const>(obj);
573 std::map<std::string, std::string> m;
574 for (
auto const& kv : j_param) {
575 m[kv.first] = get<String const>(kv.second);
577 param->UpdateAllowUnknown(m);
580 #endif // XGBOOST_JSON_H_
void Save(JsonWriter *writer) override
Describes both true and false.
Definition: json.h:269
Implementation of Intrusive Pointer. A smart pointer that points to an object with an embedded refere...
Definition: intrusive_ptr.h:72
Json & operator=(JsonBoolean boolean)
Definition: json.h:396
Json & operator[](std::string const &key) const
Index Json object with a std::string, used for Json Object.
Definition: json.h:419
Json & operator=(JsonNumber number)
Definition: json.h:359
Float & GetNumber() &
Definition: json.h:191
JsonInteger(JsonInteger &&that) noexcept
Definition: json.h:230
void Save(JsonWriter *writer) override
JsonNumber::Float & GetImpl(T &val)
Definition: json.h:455
Value & operator=(Value const &rhs) override
JsonBoolean(JsonBoolean &&value) noexcept
Definition: json.h:281
void Save(JsonWriter *writer) override
static bool IsClassOf(Value const *value)
Definition: json.h:296
std::vector< Json > & GetArray() &
Definition: json.h:126
CharT const & operator[](size_t p) const
Definition: json.h:311
JsonInteger()
Definition: json.h:210
Value & operator=(Value const &rhs) override
Value & operator=(Value const &rhs) override
static bool IsClassOf(Value const *value)
Definition: json.h:157
StringView(CharT const *str, size_t size)
Definition: json.h:309
static void Dump(Json json, std::string *out)
ValueKind
Simplified implementation of LLVM RTTI.
Definition: json.h:34
macro for using C++11 enum class as DMLC parameter
JsonNull(JsonNull &&) noexcept
Definition: json.h:253
virtual bool operator==(Value const &rhs) const =0
Json & operator[](std::string const &key) override
std::string & GetString() &
Definition: json.h:97
Json(JsonBoolean boolean)
Definition: json.h:394
bool operator==(Value const &rhs) const override
std::string TypeStr() const
Json & operator=(JsonObject object)
Definition: json.h:382
bool operator==(Value const &rhs) const override
float Float
Definition: json.h:165
bool operator==(Json const &rhs) const
Definition: json.h:428
virtual Json & operator[](std::string const &key)=0
std::string substr(size_t beg, size_t n) const
Definition: json.h:321
std::map< std::string, Json > const & GetObject() const &
Definition: json.h:151
Value const & GetValue() const &
Return the reference to stored Json value.
Definition: json.h:424
Json & operator[](std::string const &key) override
Implementation of Intrusive Ptr.
Json & operator=(Json &&other)
Definition: json.h:413
int64_t Int
Definition: json.h:204
Json & operator[](std::string const &key) override
Int const & GetInteger() &&
Definition: json.h:239
bool operator==(Value const &rhs) const override
Json & operator=(JsonArray array)
Definition: json.h:374
Json & operator=(JsonNull null)
Definition: json.h:403
JsonNull(std::nullptr_t)
Definition: json.h:252
void Save(JsonWriter *writer) override
JsonArray(std::vector< Json > const &arr)
Definition: json.h:114
Json(JsonNull null)
Definition: json.h:401
bool operator==(Value const &rhs) const override
Value & operator=(Value const &rhs) override
virtual Value & operator=(Value const &rhs)=0
bool const & GetBoolean() const &
Definition: json.h:290
bool operator==(Value const &rhs) const override
static bool IsClassOf(Value const *value)
Definition: json.h:197
virtual void Save(JsonWriter *writer)=0
std::string const & GetString() const &
Definition: json.h:96
JsonNumber()
Definition: json.h:171
Json(JsonString str)
Definition: json.h:387
bool & GetBoolean() &
Definition: json.h:291
Json(JsonNumber number)
Definition: json.h:358
JsonString(std::string &&str)
Definition: json.h:85
Json(JsonObject object)
Definition: json.h:380
Json & operator[](int ind) const
Index Json object with int, used for Json Array.
Definition: json.h:421
Value const & GetValue() &&
Definition: json.h:425
Float const & GetNumber() const &
Definition: json.h:190
void Save(JsonWriter *writer) override
Value & operator=(Value const &rhs) override
JsonString(std::string const &str)
Definition: json.h:83
Value(ValueKind _kind)
Definition: json.h:44
Int & GetInteger() &
Definition: json.h:241
Json & operator[](std::string const &key) override
CharT const & at(size_t p) const
Definition: json.h:312
T * Cast(U *value)
Definition: json.h:69
bool operator==(Value const &rhs) const override
Json(Json &&other)
Definition: json.h:412
Value & operator=(Value const &rhs) override
friend IntrusivePtrCell & IntrusivePtrRefCount(xgboost::Value const *t) noexcept
Definition: json.h:28
bool const & GetBoolean() &&
Definition: json.h:289
bool operator==(Value const &rhs) const override
Json & operator[](std::string const &key) override
static bool IsClassOf(Value const *value)
Definition: json.h:244
JsonBoolean()
Definition: json.h:273
JsonArray()
Definition: json.h:111
Json(JsonArray list)
Definition: json.h:372
Helper class for embedding reference counting into client objects. See https://www....
Definition: intrusive_ptr.h:19
JsonObject()
Definition: json.h:140
JsonString(JsonString &&str) noexcept
Definition: json.h:87
void Save(JsonWriter *writer) override
static bool IsClassOf(Value const *value)
Definition: json.h:102
std::string const & GetString() &&
Definition: json.h:95
Json(JsonInteger integer)
Definition: json.h:365
std::vector< Json > const & GetArray() &&
Definition: json.h:124
JsonBoolean(Bool value)
Definition: json.h:279
JsonNumber(FloatT value)
Definition: json.h:174
static Json Load(StringView str)
Load a Json object from string.
Json & operator[](std::string const &key) override
Int const & GetInteger() const &
Definition: json.h:240
JsonNumber(JsonNumber &&that) noexcept
Definition: json.h:182
char const * c_str() const
Definition: json.h:325
std::map< std::string, Json > const & GetObject() &&
Definition: json.h:150
JsonInteger(IntT value)
Definition: json.h:213
Value & GetValue() &
Definition: json.h:426
Json & operator[](std::string const &key) override
ValueKind Type() const
Definition: json.h:46
Float const & GetNumber() &&
Definition: json.h:189
JsonString()
Definition: json.h:82
Value & operator=(Value const &rhs) override
JsonNull()
Definition: json.h:251
friend std::ostream & operator<<(std::ostream &os, Json const &j)
Definition: json.h:432
Json & operator=(JsonString str)
Definition: json.h:389
Object ToJson(Parameter const ¶m)
Definition: json.h:562
void Save(JsonWriter *writer) override
Json & operator=(JsonInteger integer)
Definition: json.h:366
Definition: json_io.h:115
void FromJson(Json const &obj, Parameter *param)
Definition: json.h:571
static bool IsClassOf(Value const *value)
Definition: json.h:263
Data structure representing JSON format.
Definition: json.h:345
static bool IsClassOf(Value const *value)
Definition: json.h:131
bool IsA(Value const *value)
Definition: json.h:64
auto get(U &json) -> decltype(detail::GetImpl(*Cast< T >(&json.GetValue())))&
Get Json value.
Definition: json.h:546
size_t size() const
Definition: json.h:316
~JsonObject() override=default
std::vector< Json > const & GetArray() const &
Definition: json.h:125
Json()
Definition: json.h:355
JsonArray(std::vector< Json > &&arr)
Definition: json.h:112
std::map< std::string, Json > & GetObject() &
Definition: json.h:152
namespace of xgboost
Definition: base.h:110