NexusForce 1.0.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
json_value.hpp
浏览该文件的文档.
1#ifndef NEFORCE_CORE_FILE_JSON_JSON_VALUE_HPP__
2#define NEFORCE_CORE_FILE_JSON_JSON_VALUE_HPP__
3
11
16NEFORCE_BEGIN_NAMESPACE__
17
23
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 :
31 value_exception(info, type, code) {}
32
33 explicit json_exception(const exception& e) :
34 value_exception(e) {}
35
36 ~json_exception() override = default;
37 static constexpr auto static_type = "json_exception";
38};
39 // Exceptions
41
47
125
126class json_value;
127class json_null;
128class json_bool;
129class json_number;
130class json_string;
131class json_object;
132class json_array;
133
134
141class NEFORCE_API json_value : public istringify<json_value> {
142public:
155
159 virtual ~json_value() = default;
160
165 NEFORCE_NODISCARD virtual types type() const noexcept = 0;
166
171 NEFORCE_NODISCARD virtual const json_null* as_null() const noexcept { return nullptr; }
172
177 NEFORCE_NODISCARD virtual const json_bool* as_bool() const noexcept { return nullptr; }
178
183 NEFORCE_NODISCARD virtual const json_number* as_number() const noexcept { return nullptr; }
184
189 NEFORCE_NODISCARD virtual const json_string* as_string() const noexcept { return nullptr; }
190
195 NEFORCE_NODISCARD virtual const json_object* as_object() const noexcept { return nullptr; }
196
201 NEFORCE_NODISCARD virtual const json_array* as_array() const noexcept { return nullptr; }
202
207 NEFORCE_NODISCARD bool is_null() const noexcept { return type() == Null; }
208
213 NEFORCE_NODISCARD bool is_bool() const noexcept { return type() == Bool; }
214
219 NEFORCE_NODISCARD bool is_number() const noexcept { return type() == Number; }
220
225 NEFORCE_NODISCARD bool is_string() const noexcept { return type() == String; }
226
231 NEFORCE_NODISCARD bool is_object() const noexcept { return type() == Object; }
232
237 NEFORCE_NODISCARD bool is_array() const noexcept { return type() == Array; }
238
243 NEFORCE_NODISCARD string to_string() const;
244
249 NEFORCE_NODISCARD string to_indent_string() const;
250};
251
252
260class NEFORCE_API json_null final : public json_value {
261public:
266 NEFORCE_NODISCARD types type() const noexcept override { return Null; }
267
272 NEFORCE_NODISCARD const json_null* as_null() const noexcept override { return this; }
273};
274
281class NEFORCE_API json_bool final : public json_value {
282private:
283 bool value_;
284
285public:
290 explicit json_bool(const bool value) noexcept :
291 value_(value) {}
292
297 NEFORCE_NODISCARD types type() const noexcept override { return Bool; }
298
303 NEFORCE_NODISCARD const json_bool* as_bool() const noexcept override { return this; }
304
309 NEFORCE_NODISCARD bool get_value() const noexcept { return value_; }
310};
311
319class NEFORCE_API json_number final : public json_value {
320private:
321 double value_;
322
323public:
328 explicit json_number(const double value) noexcept :
329 value_(value) {}
330
335 NEFORCE_NODISCARD types type() const noexcept override { return Number; }
336
341 NEFORCE_NODISCARD const json_number* as_number() const noexcept override { return this; }
342
347 NEFORCE_NODISCARD double get_value() const noexcept { return value_; }
348};
349
357class NEFORCE_API json_string final : public json_value {
358private:
359 string value_;
360
361public:
366 explicit json_string(string value) noexcept :
367 value_(_NEFORCE move(value)) {}
368
373 NEFORCE_NODISCARD types type() const noexcept override { return String; }
374
379 NEFORCE_NODISCARD const json_string* as_string() const noexcept override { return this; }
380
385 NEFORCE_NODISCARD const string& get_value() const noexcept { return value_; }
386};
387
395class NEFORCE_API json_object final : public json_value {
396private:
398
399public:
403 json_object() = default;
404
405 json_object(const json_object&) = delete;
406 json_object& operator=(const json_object&) = delete;
407
412 json_object(json_object&& other) = default;
413
419 json_object& operator=(json_object&& other) = default;
420
425 NEFORCE_NODISCARD types type() const noexcept override { return Object; }
426
431 NEFORCE_NODISCARD const json_object* as_object() const noexcept override { return this; }
432
438 void add_member(const string& key, unique_ptr<json_value> value) { members_[key] = _NEFORCE move(value); }
439
445 NEFORCE_NODISCARD const json_value* get_member(const string& key) const {
446 const auto it = members_.find(key);
447 if (it != members_.end()) {
448 return it->second.get();
449 }
450 return nullptr;
451 }
452
457 NEFORCE_NODISCARD const unordered_map<string, unique_ptr<json_value>>& get_members() const noexcept {
458 return members_;
459 }
460};
461
469class NEFORCE_API json_array final : public json_value {
470private:
472
473public:
477 json_array() = default;
478
479 json_array(const json_array&) = delete;
480 json_array& operator=(const json_array&) = delete;
481
486 json_array(json_array&& other) = default;
487
493 json_array& operator=(json_array&& other) = default;
494
499 NEFORCE_NODISCARD types type() const noexcept override { return Array; }
500
505 NEFORCE_NODISCARD const json_array* as_array() const noexcept override { return this; }
506
511 void add_element(unique_ptr<json_value> value) { elements_.emplace_back(_NEFORCE move(value)); }
512
518 NEFORCE_NODISCARD const json_value* get_element(const size_t index) const noexcept {
519 if (index < elements_.size()) {
520 return elements_[index].get();
521 }
522 return nullptr;
523 }
524
529 NEFORCE_NODISCARD size_t size() const noexcept { return elements_.size(); }
530
535 NEFORCE_NODISCARD const vector<unique_ptr<json_value>>& get_elements() const noexcept { return elements_; }
536};
537 // JsonConfig
539 // ConfigFormat
541
542NEFORCE_END_NAMESPACE__
543#endif // NEFORCE_CORE_FILE_JSON_JSON_VALUE_HPP__
json数组类
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布尔值类
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
转换为布尔指针
json null值类
NEFORCE_NODISCARD types type() const noexcept override
获取类型
NEFORCE_NODISCARD const json_null * as_null() const noexcept override
转换为null指针
json数字值类
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
构造函数
json对象类
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
默认构造函数
json字符串值类
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
构造函数
json值抽象基类
types
json值类型枚举
@ Number
数字类型
@ Object
对象类型
@ Array
数组类型
@ String
字符串类型
@ Bool
布尔值类型
@ Null
null值类型
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
获取异常类型
可字符串化接口
独占智能指针
无序映射容器
动态大小数组容器