CXONライブラリCXONはC ++シリアル化インターフェイスですCXON JSON ( UTF-8エンコード)をシリアル化形式(テキストベースのデータ形式の例)として実装していますCXON CBORシリアル化形式として実装しています(バイナリデータ形式の例)CXON 、ゼロオーバーヘッドのあるさまざまな形式とタイプのために簡単に拡張できますCXONはC++11に準拠し、自己閉じ込められた、コンパクトなヘッダーのみのライブラリですCXONはシリアル化ライブラリですが、その目標は実際にJSON / CBOR /などと競合することです。 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
...これvalue_from value_toするために、一部のライブラリは、値タイプBoost.JSON C++タイプに変換するためのユーティリティを提供します。
完全性のために、 CXON 、これらのライブラリが提供する機能に一致するサポートされている形式の多型タイプ( nodeと呼ばれる)も提供します。
パフォーマンスはしばしば重要であり、多くのライブラリによって強調されており、この点でCXON代替案に近づいています。
多くのライブラリは、浮動小数点のシリアル化と脱派化のパフォーマンスを強調しています。 CXON <charconv>デフォルトで使用します( C++11のフォールバック実装を使用)が、 CXON_USE_BOOST_CHARCONVを定義してboost::charconv使用するように構成できます。
多型タイプに基づくライブラリには、検証があり、考慮すべきオーバーヘッドを使用していることに注意してください。
多くの場合、メモリ管理は重要です。 CXON一般的に割り当てられず、提供されたタイプ次第です。
上記の例では、メモリ管理はstd::vectorとそのアロケーターによって完全に処理されます。
CXONが提供する多型タイプは、AllocatorAwareに準拠しています。
CXONは非投げられています。ただし、関係するシリアイザーが投げられない場合。
CXON C++17 'S <charconv>に類似したインターフェイスを定義および実装します。
CXON <charconv>のインターフェースを次のように拡張します。
Format traitsを参照)Interfaceを参照)特性は、任意の複雑な形式を可能にするステートフルまたは無国籍である可能性があります。
名前付きパラメーターは、実装に柔軟性を与える時間またはランタイムをコンパイルすることができます。
インターフェイスの詳細については、 MANUALに記載されています。
CXON 、 C++の基本的な化合物、標準ライブラリタイプの大部分を箱から出してサポートしています。
CXON 、侵入的および非侵入的な方法を使用して、任意のタイプのために拡張できます。
詳細については、 MANUALをご覧ください。
JSON実装は、 RFC8259 / ECMA-404に厳密に準拠しています。
CXON/JSON 、任意のJSONデータを表すことができる多型型cxon::json::nodeも提供します。
CBOR実装はRFC7049に準拠しています。
CXON/CBOR 、任意のCBORデータを表すことができる多型タイプcxon::cbor::nodeも提供します。
CXCF CXCFは、 JSONから派生したシンプルな構成形式です。
デフォルト( <charconv> )数変換を使用したCXON降下。
デフォルト( <charconv> )数変換を使用したCXONシリアル化。
CXONバイナリサイズとコンパイル時間。
ベンチマークと追加のベンチマーク結果に関する情報は、こちらをご覧ください。
注:boost.jsonとrapidjsonは、デフォルトでより高速ではあるがわずかに不正確な数の解析アルゴリズムを使用します。ベンチマークでは、それらは完全な精度を有効にしてテストされます。
ベンチマークの結果を考えると、ライブラリCXONが合理的によく書かれていると比較されると仮定すると、 CXONゼロオーバーヘッドの原則を満たしていると言えます。
CXONはg++ >= 5 、 clang++ >= 4.0およびmsvc++ >= 19.16でテストされたC++11準拠コンパイラが必要です(ビルドを参照)。
CXON 、利用可能な場合は数値変換に<charconv>を使用しています。
そうでない場合(例:pre- C++17 )、フォールバック実装( strto*およびsprintfに基づく)が使用されます。
CXON_USE_BOOST_CHARCONVが定義されている場合、 boost::charconvが使用されます。これによりC++11/14と<charconv>の以前の実装のパフォーマンスが向上します。
CXONはヘッダーのみのライブラリです - 必要なヘッダーをコピーするか、提供されたMakeFileを使用してPOSIXシステムにインストールします。
$ sudo make installまたは:でテストスイートを実行します。
$ make checkあらゆる種類の貢献(フィードバック、提案、コード、テスト、ドキュメントなど)を歓迎します。
Github(単なる質問やコメントであっても問題を作成します)またはメールでお問い合わせください。
MITライセンスの下で配布されます。詳細については、 LICENSE参照してください。
github