1#ifndef NEFORCE_CORE_FILE_JSON_JSON_VALUE_HPP__
2#define NEFORCE_CORE_FILE_JSON_JSON_VALUE_HPP__
16NEFORCE_BEGIN_NAMESPACE__
28struct json_exception final : value_exception {
29 explicit json_exception(
const char* info =
"JSON Operation Failed.",
const char*
type = static_type,
30 const int code = 0) noexcept :
33 explicit json_exception(
const exception& e) :
36 ~json_exception()
override =
default;
37 static constexpr auto static_type =
"json_exception";
165 NEFORCE_NODISCARD
virtual types type() const noexcept = 0;
309 NEFORCE_NODISCARD
bool get_value() const noexcept {
return value_; }
347 NEFORCE_NODISCARD
double get_value() const noexcept {
return value_; }
367 value_(_NEFORCE
move(value)) {}
385 NEFORCE_NODISCARD
const string&
get_value() const noexcept {
return value_; }
446 const auto it = members_.find(key);
447 if (it != members_.end()) {
448 return it->second.get();
519 if (index < elements_.size()) {
520 return elements_[index].get();
529 NEFORCE_NODISCARD
size_t size() const noexcept {
return elements_.size(); }
542NEFORCE_END_NAMESPACE__
json_array(json_array &&other)=default
移动构造函数
json_array & operator=(json_array &&other)=default
移动赋值运算符
NEFORCE_NODISCARD const json_value * get_element(const size_t index) const noexcept
获取常量元素指针
NEFORCE_NODISCARD const vector< unique_ptr< json_value > > & get_elements() const noexcept
获取所有元素的常量引用
NEFORCE_NODISCARD types type() const noexcept override
获取类型
void add_element(unique_ptr< json_value > value)
添加元素
NEFORCE_NODISCARD const json_array * as_array() const noexcept override
转换为数组指针
NEFORCE_NODISCARD size_t size() const noexcept
获取数组大小
json_array()=default
默认构造函数
json_bool(const bool value) noexcept
构造函数
NEFORCE_NODISCARD bool get_value() const noexcept
获取布尔值
NEFORCE_NODISCARD types type() const noexcept override
获取类型
NEFORCE_NODISCARD const json_bool * as_bool() const noexcept override
转换为布尔指针
NEFORCE_NODISCARD types type() const noexcept override
获取类型
NEFORCE_NODISCARD const json_null * as_null() const noexcept override
转换为null指针
NEFORCE_NODISCARD const json_number * as_number() const noexcept override
转换为数字指针
NEFORCE_NODISCARD double get_value() const noexcept
获取数字值
NEFORCE_NODISCARD types type() const noexcept override
获取类型
json_number(const double value) noexcept
构造函数
NEFORCE_NODISCARD const unordered_map< string, unique_ptr< json_value > > & get_members() const noexcept
获取所有成员的常量引用
json_object & operator=(json_object &&other)=default
移动赋值运算符
NEFORCE_NODISCARD const json_object * as_object() const noexcept override
转换为对象指针
json_object(json_object &&other)=default
移动构造函数
NEFORCE_NODISCARD types type() const noexcept override
获取类型
void add_member(const string &key, unique_ptr< json_value > value)
添加成员
NEFORCE_NODISCARD const json_value * get_member(const string &key) const
获取常量成员指针
json_object()=default
默认构造函数
NEFORCE_NODISCARD const string & get_value() const noexcept
获取字符串值
NEFORCE_NODISCARD types type() const noexcept override
获取类型
NEFORCE_NODISCARD const json_string * as_string() const noexcept override
转换为字符串指针
json_string(string value) noexcept
构造函数
virtual NEFORCE_NODISCARD const json_string * as_string() const noexcept
转换为字符串指针
virtual NEFORCE_NODISCARD const json_number * as_number() const noexcept
转换为数字指针
NEFORCE_NODISCARD string to_string() const
转换为紧凑格式字符串
NEFORCE_NODISCARD bool is_null() const noexcept
判断是否为null类型
virtual NEFORCE_NODISCARD const json_object * as_object() const noexcept
转换为对象指针
virtual NEFORCE_NODISCARD const json_null * as_null() const noexcept
转换为null指针
virtual NEFORCE_NODISCARD types type() const noexcept=0
获取json值类型
virtual ~json_value()=default
虚析构函数
virtual NEFORCE_NODISCARD const json_array * as_array() const noexcept
转换为数组指针
NEFORCE_NODISCARD bool is_object() const noexcept
判断是否为对象类型
NEFORCE_NODISCARD bool is_array() const noexcept
判断是否为数组类型
NEFORCE_NODISCARD bool is_number() const noexcept
判断是否为数字类型
NEFORCE_NODISCARD string to_indent_string() const
转换为缩进格式字符串
virtual NEFORCE_NODISCARD const json_bool * as_bool() const noexcept
转换为布尔值指针
NEFORCE_NODISCARD bool is_bool() const noexcept
判断是否为布尔类型
NEFORCE_NODISCARD bool is_string() const noexcept
判断是否为字符串类型
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
exception(const char *info=static_type, const char *type=static_type, const int code=0)
构造函数
NEFORCE_NODISCARD int code() const noexcept
获取异常码
NEFORCE_NODISCARD const char * type() const noexcept
获取异常类型