4 #ifndef XGBOOST_JSON_IO_H_ 
 5 #define XGBOOST_JSON_IO_H_ 
 6 #include <dmlc/endian.h> 
 25  size_t constexpr 
static kMaxNumLength = std::numeric_limits<double>::max_digits10 + 1;
 
 33  size_t Pos()
 const { 
return pos_; }
 
 75  void Error(std::string msg) 
const;
 
 79  std::string msg = 
"期望: \"";
 
 84  } 
else if (got == 0) {
 
 87  msg += std::to_string(got) + 
" \"";
 
 111  template <
typename T, std::enable_if_t<!std::is_same_v<Json, T>>* = 
nullptr>
 
 112  void Save(T 
const& v) {
 
 115  template <
typename Array, 
typename Fn>
 
 116  void WriteArray(
Array const* arr, Fn&& fn) {
 
 119  size_t size = vec.size();
 
 120  for (
size_t i = 0; i < size; ++i) {
 
 121  auto const& value = vec[i];
 
 122  this->Save(fn(value));
 
 142  virtual void Visit(
F64Array const*) { LOG(FATAL) << 
"只有 UBJSON 格式可以处理 f64 数组。"; }
 
 159 #if defined(__GLIBC__) 
 160 template <
typename T>
 
 165  return __builtin_bswap16(v);
 
 170  return __builtin_bswap32(v);
 
 175  return __builtin_bswap64(v);
 
 178 template <
typename T>
 
 180  dmlc::ByteSwap(&v, 
sizeof(v), 1);
 
 185 template <
typename T, std::enable_if_t<sizeof(T) == 1>* = 
nullptr>
 
 190 template <
typename T, std::enable_if_t<sizeof(T) != 1>* = 
nullptr>
 
 192  static_assert(std::is_pod<T>::value, 
"仅支持 POD 类型。");
 
 193 #if DMLC_LITTLE_ENDIAN 
 194  auto constexpr kS = 
sizeof(T);
 
 195  std::conditional_t<kS == 2, uint16_t, std::conditional_t<kS == 4, uint32_t, uint64_t>> u;
 
 196  std::memcpy(&u, &v, 
sizeof(u));
 
 198  std::memcpy(&v, &u, 
sizeof(u));
 
 209  template <
typename T>
 
 213  std::memcpy(&v, ptr, 
sizeof(v));
 
 218  template <
typename T>
 
 220  auto v = ReadStream<T>();
 
 225  template <
typename TypedArray>
 
 226  auto ParseTypedArray(std::int64_t n) {
 
 227  TypedArray results{
static_cast<size_t>(n)};
 
 228  for (int64_t i = 0; i < n; ++i) {
 
 229  auto v = this->ReadPrimitive<typename TypedArray::value_type>();
 
 232  return Json{std::move(results)};
 
 235  std::string DecodeStr();
 
 237  Json ParseArray() 
override;
 
 238  Json ParseObject() 
override;
 
 249  void Visit(
JsonArray const* arr) 
override;
 
 250  void Visit(
F32Array const* arr) 
override;
 
 251  void Visit(
F64Array const* arr) 
override;
 
 252  void Visit(
I8Array const* arr) 
override;
 
 253  void Visit(
U8Array const* arr) 
override;
 
 254  void Visit(
I16Array const* arr) 
override;
 
 255  void Visit(
I32Array const* arr) 
override;
 
 256  void Visit(
I64Array const* arr) 
override;
 
 260  void Visit(
JsonNull const* 
null) 
override;
 
#define XGBOOST_EXPECT(cond, ret)
定义: base.h:55
std::vector< Json > const & GetArray() &&
定义: json.h:134
描述 true 和 false。
定义: json.h:350
一个 json 读取器,目前错误检查和 utf-8 尚未完全支持。
定义: json_io.h:20
virtual Json ParseString()
virtual Json ParseNumber()
virtual Json ParseArray()
StringView raw_str_
定义: json_io.h:39
Char PeekNextChar()
定义: json_io.h:53
struct xgboost::JsonReader::SourceLocation cursor_
virtual Json ParseBoolean()
Char GetNextChar()
定义: json_io.h:44
void Expect(Char c, Char got)
定义: json_io.h:78
virtual Json ParseObject()
Char GetNextNonSpaceChar()
定义: json_io.h:62
Char GetConsecutiveChar(char expected_char)
定义: json_io.h:69
std::int8_t Char
定义: json_io.h:22
void Error(std::string msg) const
virtual ~JsonReader()=default
constexpr static size_t kMaxNumLength
定义: json_io.h:25
JsonReader(StringView str)
定义: json_io.h:102
通用二进制 JSON 的类型化数组。
定义: json.h:153
std::vector< char > * stream_
定义: json_io.h:131
virtual void Save(Json json)
virtual void Visit(F64Array const *)
定义: json_io.h:142
JsonWriter(std::vector< char > *stream)
定义: json_io.h:134
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)
表示JSON格式的数据结构。
Definition: json.h:392
UBJSON 读取器 https://ubjson.org/。
定义: json_io.h:206
UBJSON 写入器 https://ubjson.org/。
定义: json_io.h:248
void Save(Json json) override
集成目标、gbm和评估的学习器接口。这是用户面临的XGB...
Definition: base.h:97
T BuiltinBSwap(T v)
定义: json_io.h:179
T ToBigEndian(T v)
定义: json_io.h:186
size_t Pos() const
定义: json_io.h:33
void Forward()
定义: json_io.h:35
void Forward(uint32_t n)
定义: json_io.h:36
Definition: string_view.h:16
value_type const * c_str() const
定义: string_view.h:50
constexpr std::size_t size() const
定义: string_view.h:43