Streamable 1.5.0
dotnet add package Streamable --version 1.5.0
NuGet\Install-Package Streamable -Version 1.5.0
<PackageReference Include="Streamable" Version="1.5.0" />
paket add Streamable --version 1.5.0
#r "nuget: Streamable, 1.5.0"
// Install Streamable as a Cake Addin #addin nuget:?package=Streamable&version=1.5.0 // Install Streamable as a Cake Tool #tool nuget:?package=Streamable&version=1.5.0
Streamable
Fastest, Smallest and Simplest (De)Serializer for C++20 or newer.
Table of Contents
- Installation
- Features
- Usage
- Benchmark
- Backwards And Forwards Compatibility
- Downsides and Limitations
- Examples
Installation
To use this library, simply download and include the header file Streamable.hpp
into your project or use NuGet to install it.
Features
- fast - fast^2, memory-- and easy++ compared to MsgPack
- easy-to-use - inherit a class and use a macro 😄
- single-header - just copy paste the file into your project
- has no dependencies - uses the
C++20
standard 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_ptr
etc...), most STL classes (std::tuple
,std::optional
,std::variant
etc...), 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
,double
etc...)
Usage
- Inherit from the
IStreamable
class 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_assert
will scream 😮 )
Benchmark
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 |
Backwards And Forwards Compatibility
This library supports forwards and backwards compatibility across different versions.
Downsides and Limitations
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
- Examples - Mixed
Learn more about Target Frameworks and .NET Standard.
This package has no dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
added forwards and backwards compatibility
fixed build for gcc