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 유형을 C++ 유형으로 변환하는 유틸리티를 제공합니다 Boost.JSON
완전성을 위해 CXON 이러한 라이브러리가 제공하는 기능과 일치하는 지원되는 형식에 대해 다형성 유형 ( node 라고 함)을 제공합니다.
성능은 종종 중요하며 많은 라이브러리에 의해 강조되며, 이와 관련하여 CXON 대안에 가깝습니다.
많은 라이브러리는 부동 소수점 직렬화 및 사막화 성능을 강조합니다. CXON 기본적으로 ( C++11 에 대한 폴백 구현 포함) <charconv> 사용하지만 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 Deserialization.
기본값 ( <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