1#ifndef NEFORCE_CORE_FILE_JSON_JSON_BUILDER_HPP__
2#define NEFORCE_CORE_FILE_JSON_JSON_BUILDER_HPP__
15NEFORCE_BEGIN_NAMESPACE__
56 range_type type = object;
70 frame(
const frame&) =
default;
71 frame& operator=(
const frame&) =
default;
72 frame(frame&&) =
default;
73 frame& operator=(frame&&) =
default;
96 if (contexts_.empty()) {
98 NEFORCE_THROW_EXCEPTION(
json_exception(
"Multiple root values not allowed"));
102 const auto& top = contexts_.top();
103 if (top.type == array) {
104 top.array_ptr->add_element(_NEFORCE
move(
value));
105 }
else if (top.type ==
object) {
106 if (current_key_.empty()) {
107 NEFORCE_THROW_EXCEPTION(
json_exception(
"No key set for value in object"));
109 top.object_ptr->add_member(current_key_, _NEFORCE
move(
value));
110 current_key_.clear();
122 template <
typename Iterable>
124 return this->value_iterable_impl(iterable);
133 template <
typename Map>
136 for (
const auto&
pair: maplike) {
149 template <
typename Iterable>
152 for (
const auto& element: iterable) {
153 this->value(element);
307 template <
typename Iterable>
309 return this->value_iterable_dispatch(iterable);
345NEFORCE_END_NAMESPACE__
json_builder & end_object()
结束当前json对象
json_builder & value(nullptr_t np)
设置null值
json_builder & value(const string &value)
设置字符串值
json_builder & value(const string_view value)
设置字符串视图值
json_builder()=default
默认构造函数
json_builder & value(const double value)
设置双精度浮点数值
json_builder & value(const char *value)
设置C字符串值
json_builder & value(const bool value)
设置布尔值
json_builder & key(const string &key)
设置当前对象的键名
json_builder & value_array(const function< void(json_builder &)> &build_func)
使用函数式方式构建数组值
json_builder & value(unique_ptr< json_value > &&value)
设置已构建的json值
json_builder & value(const int value)
设置整数值
json_builder & operator=(json_builder &&other)=default
移动赋值运算符
json_builder & begin_object()
开始一个json对象
json_builder & end_array()
结束当前json数组
json_builder & value_object(const function< void(json_builder &)> &build_func)
使用函数式方式构建对象值
json_builder(json_builder &&other)=default
移动构造函数
json_builder & begin_array()
开始一个json数组
json_builder & value(const Iterable &iterable)
设置可迭代对象的值
unique_ptr< json_value > build()
构建json文档
decltype(nullptr) nullptr_t
空指针类型
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
basic_string_view< char > string_view
字符字符串视图
typename enable_if< Test, T >::type enable_if_t
enable_if的便捷别名
NEFORCE_CONSTEXPR20 unique_ptr< T > make_unique(Args &&... args)
创建unique_ptr