Fastest, Smallest and Simplest (De)Serializer for C++20 or newer.
- Installation
- Features
- Usage
- Benchmark
- Backwards And Forwards Compatibility
- Downsides and Limitations
- Examples
To use this library, simply download and include the header file Streamable.hpp into your project or use NuGet to install it.
- fast - fast^2, memory-- and easy++ compared to MsgPack
- easy-to-use - inherit a class and use a macro :D
- single-header - just copy paste the file into your project
- has no dependencies - uses the
C++20standard library and OS native API for best performance - cross-platform -
| Platform | Support | Details |
|---|---|---|
| Windows | Yes | |
| macOS | Partial | No UTF16 encoding for memory-- |
| Linux | Partial | No UTF16 encoding for memory-- |
- supports every data type - beside itself (so called "streamables"), raw/smart pointers (ex:.
std::unique_ptr,std::shared_ptretc...), most STL classes (std::tuple,std::optional,std::variantetc...), any nested range (ex.:std::wstring,std::map, std::vector<std::list> etc...), PODs (ex.: POD structs and classes, enums, etc...), primitive types (ex.:bool,unsigned int,doubleetc...)
- Inherit from the
IStreamableclass or any class that implements it. - Use the macro STREAMABLE_DEFINE and pass your class and the objects you want to parse
- OPTIONAL For (de)serialization of inherited classes use STREAMABLE_DEFINE_BASE and pass the classes
- OPTIONAL If "streamables" pointers are (de)serialized you MUST implement FindDerivedStreamable (if you forget this, don't worry, a
static_assertwill scream :O )
This benchmark contains anything from trivial types to maps of strings to STL containers to vectors of derived classes as base class pointers etc...
| Library | Time (ms) | Memory Usage (KB) |
|---|---|---|
| Streamable | 0.379 | 85 |
| nlohmann::json | 2.9 | 187 |
| MsgPack | 0.755 | 87 |
This library supports forwards and backwards compatibility across different versions.
While Streamable offers many benefits, it's essential to consider its limitations as well:
- Custom Format - it has a custom but simple format for storing the data
- Programming Language - supports only C++ >= 20
- Examples - Mixed