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 متوافقة مع المخصصين.
CXON غير راقص ، شريطة أن لا يرمي المسلسلون المعنيون.
يحدد CXON وتنفذ واجهة مماثلة لـ C++17 'S <charconv> .
يمتد CXON واجهة <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 .
Deserialization CXON باستخدام تحويل الرقم الافتراضي ( <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 :
$ sudo make installأو قم بتشغيل أجنحة الاختبار مع:
$ make check أي نوع من المساهمة (التغذية المرتدة ، والاقتراحات ، والرمز ، والاختبارات ، والوثائق ، وما إلى ذلك) هي موضع ترحيب.
اتصل عبر github (قم بإنشاء مشكلة حتى مجرد سؤال أو تعليق) أو عبر البريد.
موزعة تحت رخصة معهد ماساتشوستس للتكنولوجيا. انظر LICENSE لمزيد من المعلومات.
جيثب