4 #ifndef XGBOOST_JSON_IO_H_
5 #define XGBOOST_JSON_IO_H_
26 size_t constexpr
static kMaxNumLength = std::numeric_limits<double>::max_digits10 + 1;
34 size_t Pos()
const {
return pos_; }
76 void Error(std::string msg)
const;
80 std::string msg =
"Expecting: \"";
85 }
else if (got == 0) {
88 msg += std::to_string(got) +
" \"";
112 template <
typename T, std::enable_if_t<!std::is_same_v<Json, T>>* =
nullptr>
113 void Save(T
const& v) {
116 template <
typename Array,
typename Fn>
117 void WriteArray(
Array const* arr, Fn&& fn) {
120 size_t size = vec.size();
121 for (
size_t i = 0; i < size; ++i) {
122 auto const& value = vec[i];
123 this->Save(fn(value));
143 virtual void Visit(
F64Array const*) { LOG(FATAL) <<
"Only UBJSON format can handle f64 array."; }
160 template <
typename T, std::enable_if_t<sizeof(T) == 1>* =
nullptr>
165 template <
typename T, std::enable_if_t<sizeof(T) != 1>* =
nullptr>
167 static_assert(std::is_pod<T>::value,
"Only pod is supported.");
168 #if DMLC_LITTLE_ENDIAN
169 auto constexpr kS =
sizeof(T);
170 std::conditional_t<kS == 2, uint16_t, std::conditional_t<kS == 4, uint32_t, uint64_t>> u;
171 std::memcpy(&u, &v,
sizeof(u));
173 std::memcpy(&v, &u,
sizeof(u));
184 template <
typename T>
188 std::memcpy(&v, ptr,
sizeof(v));
193 template <
typename T>
195 auto v = ReadStream<T>();
200 template <
typename TypedArray>
201 auto ParseTypedArray(std::int64_t n) {
202 TypedArray results{
static_cast<size_t>(n)};
203 for (int64_t i = 0; i < n; ++i) {
204 auto v = this->ReadPrimitive<typename TypedArray::value_type>();
207 return Json{std::move(results)};
210 std::string DecodeStr();
212 Json ParseArray()
override;
213 Json ParseObject()
override;
224 void Visit(
JsonArray const* arr)
override;
225 void Visit(
F32Array const* arr)
override;
226 void Visit(
F64Array const* arr)
override;
227 void Visit(
I8Array const* arr)
override;
228 void Visit(
U8Array const* arr)
override;
229 void Visit(
I16Array const* arr)
override;
230 void Visit(
I32Array const* arr)
override;
231 void Visit(
I64Array const* arr)
override;
235 void Visit(
JsonNull const*
null)
override;
Defines configuration macros and basic types for xgboost.
#define XGBOOST_EXPECT(cond, ret)
Definition: base.h:48
std::vector< Json > const & GetArray() &&
Definition: json.h:138
Describes both true and false.
Definition: json.h:354
A json reader, currently error checking and utf-8 is not fully supported.
Definition: json_io.h:21
virtual Json ParseString()
virtual Json ParseNumber()
virtual Json ParseArray()
StringView raw_str_
Definition: json_io.h:40
Char PeekNextChar()
Definition: json_io.h:54
struct xgboost::JsonReader::SourceLocation cursor_
virtual Json ParseBoolean()
Char GetNextChar()
Definition: json_io.h:45
void Expect(Char c, Char got)
Definition: json_io.h:79
virtual Json ParseObject()
Char GetNextNonSpaceChar()
Definition: json_io.h:63
Char GetConsecutiveChar(char expected_char)
Definition: json_io.h:70
std::int8_t Char
Definition: json_io.h:23
void Error(std::string msg) const
virtual ~JsonReader()=default
constexpr static size_t kMaxNumLength
Definition: json_io.h:26
JsonReader(StringView str)
Definition: json_io.h:103
Typed array for Universal Binary JSON.
Definition: json.h:157
Definition: json_io.h:111
std::vector< char > * stream_
Definition: json_io.h:132
virtual void Save(Json json)
virtual void Visit(F64Array const *)
Definition: json_io.h:143
JsonWriter(std::vector< char > *stream)
Definition: json_io.h:135
virtual void Visit(JsonInteger const *num)
virtual void Visit(JsonNull const *null)
virtual void Visit(U8Array const *arr)
virtual void Visit(JsonArray const *arr)
virtual void Visit(U32Array const *arr)
virtual void Visit(I8Array const *arr)
virtual void Visit(U64Array const *arr)
virtual void Visit(F32Array const *arr)
virtual void Visit(JsonNumber const *num)
virtual ~JsonWriter()=default
virtual void Visit(I64Array const *arr)
virtual void Visit(JsonBoolean const *boolean)
virtual void Visit(I32Array const *arr)
virtual void Visit(JsonObject const *obj)
virtual void Visit(I16Array const *arr)
virtual void Visit(U16Array const *arr)
virtual void Visit(JsonString const *str)
Data structure representing JSON format.
Definition: json.h:396
Reader for UBJSON https://ubjson.org/.
Definition: json_io.h:181
Writer for UBJSON https://ubjson.org/.
Definition: json_io.h:223
void Save(Json json) override
Learner interface that integrates objective, gbm and evaluation together. This is the user facing XGB...
Definition: base.h:89
T ToBigEndian(T v)
Definition: json_io.h:161
T ByteSwap(T v)
Definition: byteswap.h:94
size_t Pos() const
Definition: json_io.h:34
void Forward()
Definition: json_io.h:36
void Forward(uint32_t n)
Definition: json_io.h:37
Definition: string_view.h:16
value_type const * c_str() const
Definition: string_view.h:50
constexpr std::size_t size() const
Definition: string_view.h:43