Go to the documentation of this file.
4 #ifndef XGBOOST_JSON_IO_H_
5 #define XGBOOST_JSON_IO_H_
6 #include <dmlc/endian.h>
26 std::numeric_limits<double>::max_digits10 + 1;
34 size_t Pos()
const {
return pos_; }
80 void Error(std::string msg)
const;
84 std::string msg =
"Expecting: \"";
89 }
else if (got == 0) {
92 msg += (got <= 127 ? std::string{got} : std::to_string(got)) +
" \"";
116 template <typename T, std::enable_if_t<!std::is_same<Json, T>::value>* =
nullptr>
117 void Save(T
const& v) {
120 template <
typename Array,
typename Fn>
121 void WriteArray(
Array const* arr, Fn&& fn) {
124 size_t size = vec.size();
125 for (
size_t i = 0; i < size; ++i) {
126 auto const& value = vec[i];
127 this->Save(fn(value));
143 virtual void Save(Json json);
145 virtual void Visit(JsonArray
const* arr);
150 virtual void Visit(JsonObject
const* obj);
151 virtual void Visit(JsonNumber
const* num);
152 virtual void Visit(JsonInteger
const* num);
153 virtual void Visit(JsonNull
const*
null);
154 virtual void Visit(JsonString
const* str);
155 virtual void Visit(JsonBoolean
const*
boolean);
158 #if defined(__GLIBC__)
159 template <
typename T>
164 return __builtin_bswap16(v);
169 return __builtin_bswap32(v);
174 return __builtin_bswap64(v);
177 template <
typename T>
179 dmlc::ByteSwap(&v,
sizeof(v), 1);
182 #endif // defined(__GLIBC__)
184 template <
typename T, std::enable_if_t<sizeof(T) == 1>* =
nullptr>
189 template <
typename T, std::enable_if_t<sizeof(T) != 1>* =
nullptr>
191 static_assert(std::is_pod<T>::value,
"Only pod is supported.");
192 #if DMLC_LITTLE_ENDIAN
193 auto constexpr kS =
sizeof(T);
194 std::conditional_t<kS == 2, uint16_t, std::conditional_t<kS == 4, uint32_t, uint64_t>> u;
195 std::memcpy(&u, &v,
sizeof(u));
197 std::memcpy(&v, &u,
sizeof(u));
198 #endif // DMLC_LITTLE_ENDIAN
208 template <
typename T>
212 std::memcpy(&v, ptr,
sizeof(v));
217 template <
typename T>
219 auto v = ReadStream<T>();
224 template <
typename TypedArray>
225 auto ParseTypedArray(int64_t n) {
226 TypedArray results{
static_cast<size_t>(n)};
227 for (int64_t i = 0; i < n; ++i) {
228 auto v = this->ReadPrimitive<typename TypedArray::Type>();
231 return Json{std::move(results)};
234 std::string DecodeStr();
236 Json ParseArray()
override;
237 Json ParseObject()
override;
248 void Visit(
JsonArray const* arr)
override;
249 void Visit(
F32Array const* arr)
override;
250 void Visit(
U8Array const* arr)
override;
251 void Visit(
I32Array const* arr)
override;
252 void Visit(
I64Array const* arr)
override;
256 void Visit(
JsonNull const*
null)
override;
266 #endif // XGBOOST_JSON_IO_H_
Describes both true and false.
Definition: json.h:307
virtual void Visit(JsonArray const *arr)
JsonTypedArray< uint8_t, Value::ValueKind::kU8Array > U8Array
Typed UBJSON array for uint8_t.
Definition: json.h:177
char GetNextChar()
Definition: json_io.h:49
virtual Json ParseBoolean()
#define XGBOOST_EXPECT(cond, ret)
Definition: base.h:75
constexpr size_t size() const
Definition: string_view.h:38
char GetConsecutiveChar(char expected_char)
Definition: json_io.h:74
Typed array for Universal Binary JSON.
Definition: json.h:146
virtual ~JsonReader()=default
Reader for UBJSON https://ubjson.org/.
Definition: json_io.h:205
Definition: string_view.h:14
void Expect(char c, char got)
Definition: json_io.h:83
T BuiltinBSwap(T v)
Definition: json_io.h:178
constexpr static size_t kMaxNumLength
Definition: json_io.h:25
defines configuration macros of xgboost.
virtual Json ParseObject()
void Save(Json json) override
virtual Json ParseString()
StringView raw_str_
Definition: json_io.h:44
char GetNextNonSpaceChar()
Definition: json_io.h:67
JsonTypedArray< int64_t, Value::ValueKind::kI64Array > I64Array
Typed UBJSON array for int64_t.
Definition: json.h:185
virtual Json ParseArray()
struct xgboost::JsonReader::SourceLocation cursor_
JsonTypedArray< int32_t, Value::ValueKind::kI32Array > I32Array
Typed UBJSON array for int32_t.
Definition: json.h:181
T ToBigEndian(T v)
Definition: json_io.h:185
std::vector< char > * stream_
Definition: json_io.h:136
size_t Pos() const
Definition: json_io.h:34
void Forward()
Definition: json_io.h:36
JsonTypedArray< float, Value::ValueKind::kNumberArray > F32Array
Typed UBJSON array for 32-bit floating point.
Definition: json.h:173
std::vector< Json > const & GetArray() &&
Definition: json.h:128
virtual ~JsonWriter()=default
JsonWriter(std::vector< char > *stream)
Definition: json_io.h:139
void Forward(uint32_t n)
Definition: json_io.h:39
CharT const * c_str() const
Definition: string_view.h:44
Definition: json_io.h:115
virtual Json ParseNumber()
Writer for UBJSON https://ubjson.org/.
Definition: json_io.h:247
JsonReader(StringView str)
Definition: json_io.h:107
Data structure representing JSON format.
Definition: json.h:352
void Error(std::string msg) const
char PeekNextChar()
Definition: json_io.h:58
namespace of xgboost
Definition: base.h:110