4 #ifndef XGBOOST_JSON_IO_H_
5 #define XGBOOST_JSON_IO_H_
6 #include <dmlc/endian.h>
23 template <typename Char, std::enable_if_t<std::is_signed<Char>::value>* =
nullptr>
25 static_assert(std::is_same<Char, char>::value,
"");
26 return std::string{c};
29 template <typename Char, std::enable_if_t<!std::is_signed<Char>::value>* =
nullptr>
31 static_assert(std::is_same<Char, char>::value,
"");
32 return (c <=
static_cast<char>(127) ? std::string{c} : std::to_string(c));
42 std::numeric_limits<double>::max_digits10 + 1;
50 size_t Pos()
const {
return pos_; }
96 void Error(std::string msg)
const;
100 std::string msg =
"Expecting: \"";
102 msg +=
"\", got: \"";
105 }
else if (got == 0) {
132 template <typename T, std::enable_if_t<!std::is_same<Json, T>::value>* =
nullptr>
133 void Save(T
const& v) {
136 template <
typename Array,
typename Fn>
137 void WriteArray(
Array const* arr, Fn&& fn) {
140 size_t size = vec.size();
141 for (
size_t i = 0; i < size; ++i) {
142 auto const& value = vec[i];
143 this->Save(fn(value));
174 #if defined(__GLIBC__)
175 template <
typename T>
180 return __builtin_bswap16(v);
185 return __builtin_bswap32(v);
190 return __builtin_bswap64(v);
193 template <
typename T>
195 dmlc::ByteSwap(&v,
sizeof(v), 1);
200 template <
typename T, std::enable_if_t<sizeof(T) == 1>* =
nullptr>
205 template <
typename T, std::enable_if_t<sizeof(T) != 1>* =
nullptr>
207 static_assert(std::is_pod<T>::value,
"Only pod is supported.");
208 #if DMLC_LITTLE_ENDIAN
209 auto constexpr kS =
sizeof(T);
210 std::conditional_t<kS == 2, uint16_t, std::conditional_t<kS == 4, uint32_t, uint64_t>> u;
211 std::memcpy(&u, &v,
sizeof(u));
213 std::memcpy(&v, &u,
sizeof(u));
224 template <
typename T>
228 std::memcpy(&v, ptr,
sizeof(v));
233 template <
typename T>
235 auto v = ReadStream<T>();
240 template <
typename TypedArray>
241 auto ParseTypedArray(int64_t n) {
242 TypedArray results{
static_cast<size_t>(n)};
243 for (int64_t i = 0; i < n; ++i) {
244 auto v = this->ReadPrimitive<typename TypedArray::Type>();
247 return Json{std::move(results)};
250 std::string DecodeStr();
252 Json ParseArray()
override;
253 Json ParseObject()
override;
264 void Visit(
JsonArray const* arr)
override;
265 void Visit(
F32Array const* arr)
override;
266 void Visit(
U8Array const* arr)
override;
267 void Visit(
I32Array const* arr)
override;
268 void Visit(
I64Array const* arr)
override;
272 void Visit(
JsonNull const*
null)
override;
defines configuration macros of xgboost.
#define XGBOOST_EXPECT(cond, ret)
Definition: base.h:75
std::vector< Json > const & GetArray() &&
Definition: json.h:130
Describes both true and false.
Definition: json.h:311
virtual Json ParseString()
virtual Json ParseNumber()
virtual Json ParseArray()
StringView raw_str_
Definition: json_io.h:60
char PeekNextChar()
Definition: json_io.h:74
struct xgboost::JsonReader::SourceLocation cursor_
virtual Json ParseBoolean()
virtual Json ParseObject()
void Error(std::string msg) const
char GetNextNonSpaceChar()
Definition: json_io.h:83
virtual ~JsonReader()=default
constexpr static size_t kMaxNumLength
Definition: json_io.h:41
void Expect(char c, char got)
Definition: json_io.h:99
char GetConsecutiveChar(char expected_char)
Definition: json_io.h:90
char GetNextChar()
Definition: json_io.h:65
JsonReader(StringView str)
Definition: json_io.h:123
Typed array for Universal Binary JSON.
Definition: json.h:148
Definition: json_io.h:131
std::vector< char > * stream_
Definition: json_io.h:152
virtual void Save(Json json)
JsonWriter(std::vector< char > *stream)
Definition: json_io.h:155
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(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(JsonString const *str)
Data structure representing JSON format.
Definition: json.h:356
Reader for UBJSON https://ubjson.org/.
Definition: json_io.h:221
Writer for UBJSON https://ubjson.org/.
Definition: json_io.h:263
void Save(Json json) override
std::string CharToStr(Char c)
Definition: json_io.h:24
namespace of xgboost
Definition: base.h:110
T BuiltinBSwap(T v)
Definition: json_io.h:194
T ToBigEndian(T v)
Definition: json_io.h:201
size_t Pos() const
Definition: json_io.h:50
void Forward()
Definition: json_io.h:52
void Forward(uint32_t n)
Definition: json_io.h:55
Definition: string_view.h:15
CharT const * c_str() const
Definition: string_view.h:46
constexpr size_t size() const
Definition: string_view.h:40