Streamable 1.3.0
See the version list below for details.
dotnet add package Streamable --version 1.3.0
NuGet\Install-Package Streamable -Version 1.3.0
<PackageReference Include="Streamable" Version="1.3.0" />
paket add Streamable --version 1.3.0
#r "nuget: Streamable, 1.3.0"
// Install Streamable as a Cake Addin #addin nuget:?package=Streamable&version=1.3.0 // Install Streamable as a Cake Tool #tool nuget:?package=Streamable&version=1.3.0
Streamable
Fastest, Smallest and Simplest (De)Serializer for C++20 or newer.
Table of Contents
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 - 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::list
, 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 where you need to pass your class, the base classes to parse and the objects you want to parse
- OPTIONAL If "streamables" pointers are (de)serialized you MUST implement FindDerivedStreamable (if you forget this, a
static_assert
will appear explaining what is wrong)
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 |
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 support for `STREAMABLE_DEFINE` to parse multiple streamables
removed codecvt (will be removed in C++26), but added OS native API