1#ifndef NEFORCE_CORE_FILE_YAML_YAML_BUILDER_HPP__
2#define NEFORCE_CORE_FILE_YAML_YAML_BUILDER_HPP__
16NEFORCE_BEGIN_NAMESPACE__
58 context_type type = mapping;
72 frame(
const frame&) =
default;
73 frame& operator=(
const frame&) =
default;
74 frame(frame&&) =
default;
75 frame& operator=(frame&&) =
default;
82 string pending_anchor_;
100 template <
typename T>
102 apply_pending_metadata(
value);
104 if (contexts_.empty()) {
105 NEFORCE_THROW_EXCEPTION(
yaml_exception(
"Cannot add value: no active context"));
108 const auto& top = contexts_.top();
109 if (top.type == frame::sequence) {
110 top.seq_ptr->add_element(
value);
111 }
else if (top.type == frame::mapping) {
112 if (current_key_.empty()) {
113 NEFORCE_THROW_EXCEPTION(
yaml_exception(
"No key set for value in mapping"));
115 if (top.map_ptr->has_member(current_key_)) {
118 top.map_ptr->add_member(current_key_,
value);
119 current_key_.clear();
124 template <
typename Iterable>
127 for (
const auto&
pair: iterable) {
134 template <
typename Iterable>
137 for (
const auto& element: iterable) {
138 this->value(element);
318 template <
typename Iterable, enable_if_t<is_iterable_v<Iterable>,
int> = 0>
320 value_iterable_impl(iterable);
421NEFORCE_END_NAMESPACE__
yaml_builder & value(const double v)
设置双精度浮点数值
yaml_builder & begin_flow_mapping()
开始一个流样式映射
yaml_builder & value_block_sequence(const function< void(yaml_builder &)> &build_func)
使用函数式方式构建块样式序列值
yaml_builder & begin_flow_sequence()
开始一个流样式序列
yaml_builder & begin_block_mapping()
开始一个块样式映射
yaml_builder & begin_sequence()
开始一个序列(块样式)
vector< shared_ptr< yaml_value > > build_documents()
构建多文档YAML文档树
shared_ptr< yaml_value > build()
构建YAML文档树
yaml_builder & tag(string t)
为下一个值设置标签
yaml_builder & value(const char *v)
设置C字符串值
yaml_builder & value_datetime(const datetime &dt)
设置时间戳值
yaml_builder & value(nullptr_t np)
设置null值
yaml_builder & alias(const string &name)
添加一个别名引用
yaml_builder & value_block_mapping(const function< void(yaml_builder &)> &build_func)
使用函数式方式构建块样式映射值
yaml_builder & key(string key)
设置当前键名
yaml_builder & value(const int64_t v)
设置64位整数值
yaml_builder & operator=(yaml_builder &&other)=default
移动赋值运算符
yaml_builder & value(const int v)
设置整数值
yaml_builder & value_flow_sequence(const function< void(yaml_builder &)> &build_func)
使用函数式方式构建流样式序列值
yaml_builder & begin_block_sequence()
开始一个块样式序列
yaml_builder & begin_mapping()
开始一个映射(块样式)
yaml_builder & end_mapping()
结束当前映射
yaml_builder & begin_document()
开始新文档(多文档模式)
yaml_builder & end_sequence()
结束当前序列
yaml_builder & value(string v)
设置字符串值(纯文本样式)
yaml_builder & value_string(string v, yaml_string::string_style style)
设置指定类型的字符串值
yaml_builder & anchor(string name)
为下一个值设置锚点
yaml_builder & value_mapping(const function< void(yaml_builder &)> &build_func)
使用函数式方式构建映射值
yaml_builder & value(const string_view v)
设置字符串视图值
yaml_builder(yaml_builder &&other)=default
移动构造函数
yaml_builder & value(shared_ptr< yaml_value > v)
设置已构建的YAML值
yaml_builder & value_iterable(const Iterable &iterable)
设置可迭代对象的值
yaml_builder & value(const bool v)
设置布尔值
yaml_builder & value_sequence(const function< void(yaml_builder &)> &build_func)
使用函数式方式构建序列值
yaml_builder & value_flow_mapping(const function< void(yaml_builder &)> &build_func)
使用函数式方式构建流样式映射值
long long int64_t
64位有符号整数类型
decltype(nullptr) nullptr_t
空指针类型
enable_if_t<!is_unbounded_array_v< T > &&is_constructible_v< T, Args... >, shared_ptr< T > > make_shared(Args &&... args)
融合分配创建共享指针
constexpr Iterator2 move(Iterator1 first, Iterator1 last, Iterator2 result) noexcept(noexcept(inner::__move_aux(first, last, result)))
移动范围元素
basic_string_view< char > string_view
字符字符串视图
bool name(char *buffer, size_t size)
获取当前线程名称
constexpr decltype(auto) data(Container &cont) noexcept(noexcept(cont.data()))
获取容器的底层数据指针
typename enable_if< Test, T >::type enable_if_t
enable_if的便捷别名