1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/cmvy2020-libczh

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README-cn.md 5.8 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 02.12.2024 21:13 8e37928

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::operator(str)

Аналогичен Node::operator[str], но предоставляет более точные сообщения об ошибках.

Node::get()

Когда тип данных в массиве czh не уникален, T должен быть czh::value::Array.

auto arr = node["czh"]["any_array"].get<czh::value::Array>();

Пример:

example: 
  arrays:
    a = {1,2,3}
    b = {1,2,3}
  end
end

value_map

Если значения в одном узле имеют одинаковый тип, используйте value_map() для получения std::map, который содержит все ключи и значения.

Node::value_map()

Возвращает std::map<std::string, T>.

auto value_map = example["example"]["arrays"].value_map<vector<int>>();

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)

Добавляет значение value перед узлом с именем before. Если before не указан, то добавляется в конец. Возвращает ссылку на добавленный узел.

example["add"].add("add", "123", "abc");
Node::add_node(name, before)

Перед узлом с именем before добавляется узел с именем name. Возвращается ссылка на добавленный узел.

example.add_node("new", "before");

Удаление

Node::remove()

Удаляет узел.

Очистка

Node::clear()

Очищает узел.

Переименование

Node::rename(name, newname)

Переименовывает узел.

Вывод

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

Нам нужно написать класс, который соответствует концепции Writer:

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.

Лицензия

libczh лицензирован под Apache-2.0. Лицензия (LICENSE) получить лицензию

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/cmvy2020-libczh.git
git@api.gitlife.ru:oschina-mirror/cmvy2020-libczh.git
oschina-mirror
cmvy2020-libczh
cmvy2020-libczh
master