CXON -BibliothekCXON ist eine C ++ - SerialisierungsschnittstelleCXON implementiert JSON ( UTF-8 codiert) als Serialisierungsformat (ein Beispiel für ein textbasiertes Datenformat)CXON implementiert CBOR als Serialisierungsformat (Beispiel für ein binäres Datenformat)CXON ist für verschiedene Formate und Typen ohne Null-Overhead leicht zu erweiternCXON ist eine C++11 konform, selbsthaltige und kompakte Header-Bibliothek Obwohl CXON eine Serialisierungsbibliothek ist, ist es ihr Ziel, tatsächlich mit JSON / CBOR / usw. zu konkurrieren. Bibliotheken wie Boost.JSON / RapidJSON / etc. Der Hauptvorteil ist, dass für die Darstellung der Daten kein Zwischentyp benötigt wird - jeder C++ Typ, der semantisch ergeht, kann verwendet werden.
# 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 }));
}Eine erfolgreiche Deserialisierung bedeutet, dass die Eingabe syntaktisch und semantisch korrekt ist.
Andere solche Bibliotheken stellen beliebige Daten mit polymorpem Typ ( DOM , value usw.) dar, und eine erfolgreiche Parsen der Eingabedaten bedeutet nur, dass sie syntaktisch korrekt sind.
// 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
... Um dies zu unterstützen, bieten einige Bibliotheken Dienstprogramme, um den Werttyp in einen C++ Typ zu konvertieren - z. B. Boost.JSON liefert value_from / value_to .
Für die Vollständigkeit bietet CXON auch polymorphe Typen (als node bezeichnet) für die unterstützten Formate, die den von diesen Bibliotheken bereitgestellten Funktionen entsprechen.
Die Leistung ist oft wichtig und wird von vielen Bibliotheken betont, und in dieser Hinsicht liegt CXON nahe an den Alternativen.
Viele Bibliotheken betonen die Serialisierung und Deserialisierungsleistung der schwimmenden Punkte. CXON verwendet standardmäßig <charconv> (mit einer Fallback -Implementierung für C++11 ), kann jedoch so konfiguriert werden, dass sie boost::charconv verwenden, indem CXON_USE_BOOST_CHARCONV definiert wird.
Beachten Sie, dass Bibliotheken, die auf polymorphen Typen basieren, validiert und überzogen werden, die berücksichtigt werden sollten.
Die Speicherverwaltung ist oft wichtig. CXON ist im Allgemeinen nicht zugewiesen, sondern den angegebenen Typen.
Im obigen Beispiel wird die Speicherverwaltung von std::vector und seinem Allocator vollständig behandelt.
Die von CXON bereitgestellten polymorphen Typen sind Allocatora -konform.
CXON w Throwing , vorausgesetzt, die beteiligten Serialisierer werfen nicht werfen.
CXON definiert und implementiert eine Schnittstelle, die C++17 <charconv> ist.
CXON erweitert die Schnittstelle von <charconv> mit:
Format traits )Interface ) Die Merkmale können staatlich oder auf Stauro ermöglichen, die willkürliche komplexe Formate ermöglichen.
Mit den benannten Parametern können die Zeit oder Laufzeit kompiliert werden, was den Implementierungen Flexibilität gibt.
Mehr über die Schnittstelle finden Sie im MANUAL .
CXON unterstützt einen guten Teil der grundlegenden, zusammengesetzten und Standardbibliothekstypen von C++ .
CXON kann für willkürliche Typen unter Verwendung von intrusiven und nicht störenden Methoden erweitert werden.
Weitere Details finden Sie im MANUAL .
JSON Die Implementierung entspricht streng mit RFC8259 / ECMA-404 .
CXON/JSON bietet auch einen polymorphen Typ cxon::json::node , der willkürliche JSON -Daten darstellen kann.
CBOR Die Implementierung entspricht RFC7049 .
CXON/CBOR bietet auch einen polymorphen Typ cxon::cbor::node , der willkürliche CBOR -Daten darstellen kann.
CXCF CXCF ist ein einfaches Konfigurationsformat von JSON .
CXON -Deserialisierung unter Verwendung der Standardkonvertierung von Standard ( <charconv> ).
CXON -Serialisierung unter Verwendung der Standardkonvertierung von Standard ( <charconv> ).
CXON Binärgröße und Compilationszeiten.
Informationen zu den Benchmarks und zusätzlichen Benchmark -Ergebnissen finden Sie hier.
HINWEIS: Boost.json und Rapidjson verwenden standardmäßig schneller, aber leicht ungenau. In den Benchmarks werden sie mit aktivierter Präzision getestet.
Angesichts der Benchmark-Ergebnisse und unter der Annahme, dass die Bibliotheken CXON verglichen werden, die einigermaßen gut geschrieben sind, kann CXON das Zero-Overhead-Prinzip erfüllen.
CXON benötigt C++11 konformes Compiler, getestet mit g++ >= 5 , clang++ >= 4.0 und msvc++ >= 19.16 (siehe die Builds).
CXON verwendet <charconv> für numerische Conversions, falls verfügbar.
Wenn nicht (z. B. Pre- C++17 ) wird eine Fallback-Implementierung (basierend auf strto* und sprintf ) verwendet.
Wenn CXON_USE_BOOST_CHARCONV definiert ist, wird boost::charconv verwendet. Dies bietet einen guten Leistungsschub für C++11/14 und einige frühere Implementierungen von <charconv> .
CXON ist eine Nur -Header -Bibliothek - kopieren Sie die Header, die Sie benötigen, oder verwenden Sie das bereitgestellte Makefile, um sie auf POSIX -Systemen zu installieren:
$ sudo make installOder führen Sie die Testsuiten mit: aus:
$ make check Jede Art von Beitrag (Feedback, Vorschläge, Code, Tests, Dokumentation usw.) ist willkommen.
Kontakt über GitHub (erstellen Sie ein Problem, auch wenn es sich nur um eine Frage oder einen Kommentar handelt) oder per E -Mail.
Unter der MIT -Lizenz verteilt. Weitere Informationen finden Sie LICENSE .
Github