Support f64 for ubjson. (#10055)
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* Copyright 2019-2023 by XGBoost Contributors
|
||||
* Copyright 2019-2024, XGBoost Contributors
|
||||
*/
|
||||
#ifndef XGBOOST_JSON_H_
|
||||
#define XGBOOST_JSON_H_
|
||||
@@ -42,7 +42,8 @@ class Value {
|
||||
kBoolean,
|
||||
kNull,
|
||||
// typed array for ubjson
|
||||
kNumberArray,
|
||||
kF32Array,
|
||||
kF64Array,
|
||||
kU8Array,
|
||||
kI32Array,
|
||||
kI64Array
|
||||
@@ -173,7 +174,11 @@ class JsonTypedArray : public Value {
|
||||
/**
|
||||
* @brief Typed UBJSON array for 32-bit floating point.
|
||||
*/
|
||||
using F32Array = JsonTypedArray<float, Value::ValueKind::kNumberArray>;
|
||||
using F32Array = JsonTypedArray<float, Value::ValueKind::kF32Array>;
|
||||
/**
|
||||
* @brief Typed UBJSON array for 64-bit floating point.
|
||||
*/
|
||||
using F64Array = JsonTypedArray<double, Value::ValueKind::kF64Array>;
|
||||
/**
|
||||
* @brief Typed UBJSON array for uint8_t.
|
||||
*/
|
||||
@@ -457,9 +462,9 @@ class Json {
|
||||
Json& operator[](int ind) const { return (*ptr_)[ind]; }
|
||||
|
||||
/*! \brief Return the reference to stored Json value. */
|
||||
Value const& GetValue() const & { return *ptr_; }
|
||||
Value const& GetValue() && { return *ptr_; }
|
||||
Value& GetValue() & { return *ptr_; }
|
||||
[[nodiscard]] Value const& GetValue() const& { return *ptr_; }
|
||||
Value const& GetValue() && { return *ptr_; }
|
||||
Value& GetValue() & { return *ptr_; }
|
||||
|
||||
bool operator==(Json const& rhs) const {
|
||||
return *ptr_ == *(rhs.ptr_);
|
||||
@@ -472,7 +477,7 @@ class Json {
|
||||
return os;
|
||||
}
|
||||
|
||||
IntrusivePtr<Value> const& Ptr() const { return ptr_; }
|
||||
[[nodiscard]] IntrusivePtr<Value> const& Ptr() const { return ptr_; }
|
||||
|
||||
private:
|
||||
IntrusivePtr<Value> ptr_{new JsonNull};
|
||||
|
||||
@@ -142,6 +142,7 @@ class JsonWriter {
|
||||
|
||||
virtual void Visit(JsonArray const* arr);
|
||||
virtual void Visit(F32Array const* arr);
|
||||
virtual void Visit(F64Array const*) { LOG(FATAL) << "Only UBJSON format can handle f64 array."; }
|
||||
virtual void Visit(U8Array const* arr);
|
||||
virtual void Visit(I32Array const* arr);
|
||||
virtual void Visit(I64Array const* arr);
|
||||
@@ -244,7 +245,8 @@ class UBJReader : public JsonReader {
|
||||
*/
|
||||
class UBJWriter : public JsonWriter {
|
||||
void Visit(JsonArray const* arr) override;
|
||||
void Visit(F32Array const* arr) override;
|
||||
void Visit(F32Array const* arr) override;
|
||||
void Visit(F64Array const* arr) override;
|
||||
void Visit(U8Array const* arr) override;
|
||||
void Visit(I32Array const* arr) override;
|
||||
void Visit(I64Array const* arr) override;
|
||||
|
||||
Reference in New Issue
Block a user