CXONCXON adalah antarmuka serialisasi C ++CXON mengimplementasikan JSON ( UTF-8 yang dikodekan) sebagai format serialisasi (contoh format data berbasis teks)CXON mengimplementasikan CBOR sebagai format serialisasi (contoh format data biner)CXON mudah diperluas untuk berbagai format dan jenis dengan nol-overheadCXON adalah perpustakaan C++11 yang sesuai, mandiri dan compact header saja Meskipun CXON adalah perpustakaan serialisasi, tujuannya adalah untuk benar -benar bersaing dengan JSON / CBOR / dll. Perpustakaan seperti Boost.JSON / RapidJSON / dll. Dan keuntungan utamanya adalah, bahwa tidak ada tipe perantara yang diperlukan untuk mewakili data - jenis C++ apa pun yang cocok dengan yang dapat digunakan secara semantik.
# 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 }));
}Deserialisasi yang berhasil berarti bahwa inputnya benar dan semantik .
Perpustakaan lain tersebut mewakili data sewenang -wenang dengan tipe polimorfik (disebut DOM , value , dll.), Dan berhasil parsing dari data input hanya berarti bahwa itu benar secara sintaksis.
// 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
... Untuk membantu hal ini, beberapa perpustakaan menyediakan utilitas untuk mengonversi tipe nilai menjadi tipe C++ - misalnya Boost.JSON menyediakan value_from / value_to .
Untuk kelengkapan, CXON juga menyediakan tipe polimorfik (disebut node ) untuk format yang didukung yang sesuai dengan fungsionalitas yang disediakan oleh perpustakaan ini.
Kinerja seringkali penting dan ditekankan oleh banyak perpustakaan dan dalam hal ini, CXON dekat dengan alternatif.
Banyak perpustakaan menekankan kinerja serialisasi floating-point dan deserialisasi. CXON menggunakan <charconv> secara default (dengan implementasi fallback untuk C++11 ), tetapi dapat dikonfigurasi untuk menggunakan boost::charconv dengan mendefinisikan CXON_USE_BOOST_CHARCONV .
Perhatikan bahwa perpustakaan berdasarkan jenis polimorfik memiliki validasi dan penggunaan overhead yang harus diperhitungkan.
Manajemen memori seringkali penting. CXON tidak mengalokasikan secara umum, tergantung pada jenis yang disediakan.
Dalam contoh di atas, manajemen memori akan ditangani sepenuhnya oleh std::vector dan alokasinya.
Jenis polimorfik yang disediakan oleh CXON sesuai dengan alokasi.
CXON tidak melempar , asalkan serialzer yang terlibat tidak melempar.
CXON mendefinisikan dan mengimplementasikan antarmuka yang mirip dengan C++17 's <charconv> .
CXON EXTENDS <charconv> antarmuka dengan:
Format traits )Interface ) Ciri -ciri dapat menjadi stateful atau stateless memungkinkan format kompleks sewenang -wenang.
Parameter yang disebutkan dapat dikompilasi waktu atau runtime yang memberikan fleksibilitas untuk implementasi.
Lebih lanjut tentang antarmuka dapat ditemukan di MANUAL .
CXON mendukung bagian yang baik dari tipe fundamental, senyawa, dan perpustakaan standar C++ di luar kotak.
CXON dapat diperpanjang untuk tipe sewenang-wenang, menggunakan metode intrusif dan tidak mengganggu.
Rincian lebih lanjut dapat ditemukan di MANUAL .
JSON Implementasi secara ketat mematuhi RFC8259 / ECMA-404 .
CXON/JSON juga menyediakan tipe polimorfik cxon::json::node , yang dapat mewakili data JSON sewenang -wenang.
CBOR Implementasi sesuai dengan RFC7049 .
CXON/CBOR juga menyediakan tipe polimorfik cxon::cbor::node , yang dapat mewakili data CBOR yang sewenang -wenang.
CXCF CXCF adalah format konfigurasi sederhana yang berasal dari JSON .
Deserialisasi CXON Menggunakan konversi nomor default ( <charconv> ).
Serialisasi CXON menggunakan konversi nomor default ( <charconv> ).
Ukuran biner CXON dan waktu kompilasi.
Informasi tentang tolok ukur dan hasil tolok ukur tambahan dapat ditemukan di sini.
Catatan: Boost.json dan RapidJson menggunakan algoritma parsing angka yang lebih cepat tetapi sedikit tidak tepat secara default. Dalam tolok ukur mereka diuji dengan presisi penuh diaktifkan.
Mengingat hasil patokan dan dengan asumsi bahwa perpustakaan CXON dibandingkan dengan ditulis dengan cukup baik, dapat dikatakan bahwa CXON memenuhi prinsip nol-overhead.
CXON membutuhkan kompiler yang sesuai dengan C++11 , diuji dengan g++ >= 5 , clang++ >= 4.0 dan msvc++ >= 19.16 (lihat Builds).
CXON menggunakan <charconv> untuk konversi numerik jika tersedia.
Jika tidak (Kel. Pre- C++17 ) implementasi fallback (berdasarkan strto* dan sprintf ) akan digunakan.
Jika CXON_USE_BOOST_CHARCONV didefinisikan, boost::charconv akan digunakan. Ini akan memberikan dorongan kinerja yang baik untuk C++11/14 dan beberapa implementasi sebelumnya dari <charconv> .
CXON adalah perpustakaan header saja - Salin header yang Anda butuhkan, atau gunakan Makefile yang disediakan untuk menginstalnya pada sistem POSIX :
$ sudo make installatau jalankan suite tes dengan:
$ make check Segala jenis kontribusi (umpan balik, saran, kode, tes, dokumentasi, dll.) Dibawakan.
Hubungi melalui GitHub (buat masalah bahkan itu hanya pertanyaan atau komentar) atau melalui surat.
Didistribusikan di bawah lisensi MIT. Lihat LICENSE untuk informasi lebih lanjut.
GitHub