CXONCXON - это интерфейс сериализации C ++CXON реализует JSON ( UTF-8 кодированный) в качестве формата сериализации (пример текстового формата данных)CXON реализует CBOR в виде формата сериализации (пример бинарного формата данных)CXON легко расширить для разных форматов и типов с нулевыми переоборудованиемCXON -это C++11 , совместимая, самоудерживаемая и компактная библиотека только для заголовков. Хотя CXON является библиотекой сериализации, ее цель - фактически конкурировать с JSON / CBOR / ETC. Библиотеки, такие как Boost.JSON / RapidJSON / etc. И его основное преимущество заключается в том, что для представления данных не требуется промежуточный тип - любой тип C++ , который соответствует им семантически, можно использовать.
# include " cxon/json.hxx "
# include " cxon/lib/std/vector.hxx " // for <vector>
# include < cassert >
int main () {
std::vector< int > cxx; // or std::array, std::list, std::set, etc.
// the input is a JSON array, semantically a list of integers
auto result = cxon::from_bytes (cxx, " [1, 2, 3] " );
assert (result);
// the data is loaded successfully, no additional semantic validation is needed, so
assert (cxx == (std::vector< int > { 1 , 2 , 3 }));
}Успешная десериализация означает, что ввод синтаксически и семантически правильный.
Другие подобные библиотеки представляют произвольные данные с полиморфным типом (называемым DOM , value и т. Д.), А успешно анализ входных данных только означает, что он является синтаксически правильным.
// pseudo code
value_type json = json_lib::parse( " [1, 2, 3] " );
assert (json.has_parsing_errors()); // check for syntax errors
// check the semantics, expected is a list of integers
assert (json.is_array()); // check the type
auto & array = json.get_array();
assert ( // check the values
array.size() > ... &&
array[0].is_integer() &&
array[1].is_integer() &&
array[2].is_integer() &&
...
);
// the input is semantically correct, but
// the values still need special attention
int x0 = array[ 0 ].get_integer(); // it's an int, but not quite
... Чтобы помочь с этим, некоторые из библиотек предоставляют утилиты для преобразования типа значения в тип C++ - например, Boost.JSON предоставляет value_from / value_to .
Для полноты CXON также предоставляет полиморфные типы (называемые node ) для поддерживаемых форматов, которые соответствуют функциональности, предоставленной этими библиотеками.
Производительность часто важна и подчеркивается многими библиотеками, и в этом отношении CXON близок к альтернативам.
Многие библиотеки подчеркивают сериализацию с плавающей точкой и производительность десериализации. CXON использует <charconv> по умолчанию (с реализацией резервной системы для C++11 ), но может быть настроен на использование boost::charconv , определяя CXON_USE_BOOST_CHARCONV .
Обратите внимание, что библиотеки, основанные на полиморфных типах, имеют проверку и использование накладных расходов, которые следует учитывать.
Управление памятью часто важно. CXON не распределяется в целом, это зависит от предоставленных типов.
В приведенном выше примере управление памятью будет полностью обработано std::vector и ее выделением.
Полиморфные типы, предоставленные CXON , соответствуют AllocatorAware.
CXON не отказывается , при условии, что вовлеченные сериалы не бросают.
CXON определяет и реализует интерфейс, аналогичный C++17 'S <charconv> .
CXON Extends <charconv> интерфейс с:
Format traits )Interface ) Черты могут быть государственными или без сохранения состояния, позволяя производить произвольные комплексные форматы.
Названные параметры могут быть временем компиляции или времени выполнения, дают гибкость для реализаций.
Подробнее о интерфейсе можно найти в MANUAL .
CXON поддерживает хорошую часть фундаментальных, составных и стандартных библиотечных типов C++ .
CXON может быть расширен для произвольных типов, используя навязчивые и неинтрузивные методы.
Более подробную информацию можно найти в MANUAL .
JSON Реализация строго соответствует RFC8259 / ECMA-404 .
CXON/JSON также предоставляет полиморфный тип cxon::json::node , который может представлять произвольные данные JSON .
CBOR Реализация соответствует RFC7049 .
CXON/CBOR также предоставляет полиморфный тип cxon::cbor::node , который может представлять собой произвольные данные CBOR .
CXCF CXCF - это простой формат конфигурации, полученный из JSON .
CXON Deserialization с использованием преобразования номера по умолчанию ( <charconv> ).
Сериализация CXON с использованием преобразования номера по умолчанию ( <charconv> ).
CXON Бинарный размер и время компиляции.
Информацию о тестах и дополнительных результатах контрольных показателей можно найти здесь.
Примечание. Boost.json и Rapidjson используют более быстрые, но слегка неточные алгоритмы анализа номеров по умолчанию. В критериях они протестированы с включенной полной рецепцией.
Учитывая контрольные результаты и предполагая, что библиотеки CXON сравниваются, с которыми сталкиваются достаточно хорошо написаны, можно сказать, что CXON удовлетворяет принципу нулевой иоверны.
CXON требует C++11 компилятора, протестированного с g++ >= 5 , clang++ >= 4.0 и msvc++ >= 19.16 (см. Строи).
CXON использует <charconv> для числовых преобразований, если таковые имеются.
Если нет (например, Pre- C++17 ) будет использоваться резервная реализация (на основе strto* и sprintf ).
Если определен CXON_USE_BOOST_CHARCONV , будет использоваться boost::charconv . Это обеспечит хороший повышение производительности для C++11/14 и некоторые более ранние реализации <charconv> .
CXON - это библиотека только для заголовка - скопируйте необходимые вам заголовки или используйте предоставленную MakeFile для установки в POSIX Systems:
$ sudo make installили запустите тестовые люксы с помощью:
$ make check Приглашается любой вид вклада (обратная связь, предложения, код, тесты, документация и т. Д.).
Свяжитесь через GitHub (создайте проблему, даже это просто вопрос или комментарий) или по почте.
Распределено по лицензии MIT. Смотрите LICENSE для получения дополнительной информации.
GitHub