Skip to content

Latest commit

 

History

History
235 lines (161 loc) · 4.63 KB

README-cn.md

File metadata and controls

235 lines (161 loc) · 4.63 KB

libczh

一个简单易用的数据序列化格式

build License Release

Document Document

Example

使用方法

语法

类型

  • int,double,string,bool,Array,Reference

语句

  • 可以没有缩进
  • 语句后可以有;, 但不是必需的

注释

  • <xxxx>

Node

  • 名字不可重复
  • Node: id: end
  • Value: id = xxx

数组

  • {} .

引用

  • id = a::b::c::id

libczh使用方法

配置

  • 只需 #include "libczh/czh.hpp"!
  • 要求 C++ 20

Czh::Czh(str, mode)

模式
  • czh::InputMode::file -> str 是路径
  • czh::InputMode::string -> str 是一个存储czh的字符串
  Czh("example: a = 1; end;", czh::InputMode::string);

Node::operator[str]

  • 返回名为str的Node。

Node::operator(str)

  • 与Node::operator[str]相似,但提供更好的错误提示。

Node::get()

  • 当czh中数组存储的数据类型不唯一时,T必须是czh::value::Array
auto arr = node["czh"]["any_array"].get<czh::value::Array>();

value_map

  • 同一Node下的值的类型相同时时,使用value_map()获取一个存储了所有key和value的std::map

Node::value_map()

  • 返回 std::map<std::string, T>
auto value_map = example["example"]["arrays"].value_map<vector<int>>();
example: 
  arrays:
    a = {1,2,3}
    b = {1,2,3}
  end
end

Node::operator=(value)

node["czh"]["int_array"] = Range(1, 10);        // custom container
node["czh"]["int_array"] = std::ranges::views::iota(1,10); // std::ranges
node["czh"]["int_array"] = {1, 2, 3};           // brace-enclosed initializer list
node["czh"]["any_array"] = {false, 1, "2", 3.0};// czh::value::Array

添加

Node::add(key, value, before)
  • 在名为 before的Node前添加一个值为value的Node
  • before 默认为空,此时添加在末尾
  • 返回添加的Node的引用
example["add"].add("add", "123", "abc");
Node::add_node(name, before)
  • 在名为 before的Node前添加一个名为name的Node
  • 返回添加的Node的引用
example.add_node("new", "before");

删除

Node::remove()
example["example"].remove();

清空

Node::clear()
example["example"].clear();

重命名

Node::rename(name, newname)

example["a"].rename("b");

输出

Writer
  • libczh 原生支持三个writer
Writer 格式
BasicWriter 无格式化
PrettyWriter 格式化
ColorWriter 格式化 + 高亮(ANSI Escape Code)
Node::accept()
  • 接受一个 Writer
    writer::BasicWriter<std::ostream> w{ std::cout };
node.accept(w);
operator<<
  • 等同于 BasicWriter
写一个Writer
  • 我们只需写一个满足如下concept的类。
template<typename T>
concept Writer =
requires(T w)
{
{ w.node_begin(std::string()) };
{ w.node_end() };
{ w.value_begin(std::string()) };
{ w.value(value::Value{}) };
{ w.value_ref_path_set_global() };
{ w.value_ref_path(std::string()) };
{ w.value_ref_id(std::string()) };
{ w.value_array_begin() };
{ w.value_array_value(value::Array::value_type{}) };
{ w.value_array_end(value::Array::value_type{}) };
{ w.value_array_end() };
};

联系

  • 如果你有任何问题或建议,请提交一个issue或给我发邮件
  • 邮箱: cao2013zh at 163 dot com

贡献

  • 任何贡献都是受欢迎的,只需提一个PR

许可