CXONCXON เป็นอินเทอร์เฟซอนุกรม C ++CXON ใช้ JSON (encoded UTF-8 ) เป็นรูปแบบการทำให้เป็นอนุกรม (ตัวอย่างของรูปแบบข้อมูลที่ใช้ข้อความ)CXON ใช้ CBOR เป็นรูปแบบการทำให้เป็นอนุกรม (ตัวอย่างของรูปแบบข้อมูลไบนารี)CXON นั้นง่ายต่อการขยายสำหรับรูปแบบและประเภทที่แตกต่างกันโดยไม่มีศูนย์CXON เป็นไลบรารีส่วนหัวที่สอดคล้อง C++11 แม้ว่า CXON จะเป็นห้องสมุดอนุกรม แต่เป้าหมายคือการแข่งขันกับ JSON / CBOR / ฯลฯ ห้องสมุดเช่น Boost.JSON / RapidJSON / ฯลฯ และ ข้อได้เปรียบ หลักของมันคือไม่จำเป็นต้องใช้ประเภทระดับกลางเพื่อแสดงข้อมูล - ประเภท 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 }));
}การ deserialization ที่ประสบความสำเร็จหมายความว่าอินพุตนั้นถูกต้องทางไวยากรณ์และ ความหมาย
ไลบรารีอื่น ๆ แสดงถึงข้อมูลโดยพลการที่มีประเภท polymorphic (เรียกว่า 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 ยังมีประเภท polymorphic (เรียกว่า node ) สำหรับรูปแบบที่รองรับที่ตรงกับฟังก์ชั่นที่จัดทำโดยไลบรารีเหล่านี้
การแสดง มักจะมีความสำคัญและเน้นโดยห้องสมุดหลายแห่งและในแง่นี้ CXON อยู่ใกล้กับทางเลือกอื่น
ห้องสมุดหลายแห่งเน้นการทำให้เป็นอนุกรมและประสิทธิภาพการทำงานของ Deserialization CXON ใช้ <charconv> โดยค่าเริ่มต้น (ด้วยการใช้งานทางเลือกสำหรับ C++11 ) แต่สามารถกำหนดค่าให้ใช้ boost::charconv โดยการกำหนด CXON_USE_BOOST_CHARCONV
โปรดทราบว่าห้องสมุดที่อยู่บนพื้นฐานของประเภท polymorphic มีการตรวจสอบความถูกต้องและใช้ค่าใช้จ่ายที่ควรนำมาพิจารณา
การจัดการหน่วยความจำ มักจะสำคัญ CXON ไม่ได้จัดสรรโดยทั่วไปมันขึ้นอยู่กับประเภทที่ให้ไว้
ในตัวอย่างข้างต้นการจัดการหน่วยความจำจะได้รับการจัดการอย่างสมบูรณ์โดย std::vector และตัวจัดสรร
ประเภท polymorphic ที่จัดทำโดย CXON นั้นเป็นไปตามมาตรฐาน
CXON นั้น ไม่ได้โยน โดยที่ผู้ที่เกี่ยวข้องกับ serializers ไม่ได้โยน
CXON กำหนดและดำเนินการอินเทอร์เฟซที่คล้ายกับ C++17 'S <charconv>
CXON ขยายอินเทอร์เฟซของ <charconv> ด้วย:
Format traits )Interface ) ลักษณะอาจเป็นสถานะหรือไร้สัญชาติที่อนุญาตให้มีรูปแบบที่ซับซ้อนโดยพลการ
พารามิเตอร์ที่มีชื่อสามารถรวบรวมเวลาหรือรันไทม์ให้ความยืดหยุ่นสำหรับการใช้งาน
เพิ่มเติมเกี่ยวกับอินเทอร์เฟซสามารถพบได้ใน MANUAL
CXON รองรับส่วนที่ดีของประเภทพื้นฐานของไลบรารีสารประกอบและมาตรฐานของ C++ ประเภทออกจากกล่อง
CXON สามารถขยายได้สำหรับประเภทโดยพลการโดยใช้วิธีการล่วงล้ำและไม่ล่วงล้ำ
รายละเอียดเพิ่มเติมสามารถพบได้ใน MANUAL
JSON การดำเนินการอย่างเคร่งครัดสอดคล้องกับ RFC8259 / ECMA-404
CXON/JSON ยังมีประเภท polymorphic cxon::json::node ซึ่งสามารถเป็นตัวแทนของข้อมูล JSON โดยพลการ
CBOR การดำเนินการเป็นไปตาม RFC7049
CXON/CBOR ยังมีประเภท polymorphic 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 :
$ sudo make installหรือเรียกใช้ชุดทดสอบด้วย:
$ make check การบริจาคทุกประเภท (ข้อเสนอแนะ, คำแนะนำ, รหัส, การทดสอบ, เอกสาร, ฯลฯ ) ยินดีต้อนรับ
ติดต่อผ่าน GitHub (สร้างปัญหาแม้เป็นเพียงคำถามหรือความคิดเห็น) หรือทางไปรษณีย์
แจกจ่ายภายใต้ใบอนุญาต MIT ดู LICENSE สำหรับข้อมูลเพิ่มเติม
คนอื่น ๆ