Serialization
Generic Serialisation and Deserialisation Methods. A combination of C++20 Concepts and Requires clauses are used to automatically determine how to (de)serialize data. Boost PFR is used to iterate over non-trivial structures. Underlying data is ideally trivially copyable or some range which can be copied element-by-element. This will not work properly with pointer-like objects.
- Author
Bryce Ferenczi
- Version
0.1
- Date
2024-05-27
- Copyright
Copyright (c) 2024
-
namespace cvt
Functions
-
template<std::ranges::range T>
void serialize(const T &data, std::ostream &stream) Serialize range of values to an output stream where the range is contiguous and the values are trivially copyable.
- Template Parameters:
T – range type
- Parameters:
data – data to serialise
stream – output stream to write data
-
template<std::ranges::range T>
void serialize(const T &data, std::ostream &stream) Serialize range of values to an output stream by writing each element one-by-one.
- Template Parameters:
T – range type
- Parameters:
data – data to serialize
stream – output stream to write data
-
template<typename T>
void serialize(const T &data, std::ostream &stream) Serialize value to output stream.
- Template Parameters:
T – data type which must be trivially copyable
- Parameters:
data – data to write
stream – output stream to write data
-
template<typename T>
void serialize(const T &data, std::ostream &stream) Serialize aggregate structure that isn’t trivially copyable element-by-element.
- Template Parameters:
T – data type to serialize
- Parameters:
data – data to write
stream – output stream to write data
-
template<std::ranges::range T>
void deserialize(T &data, std::istream &stream) Deserialize range of values where the range is contiguous and the value type is trivially copyable from input stream.
- Template Parameters:
T – range type of trivially-copyable elements
- Parameters:
data – reference to output range to write data
stream – input stream to read data from
-
template<std::ranges::range T>
void deserialize(T &data, std::istream &stream) Deserialize range of values element-by-element from input stream.
- Template Parameters:
T – range type
- Parameters:
data – output reference to write data
stream – input stream to read data from
-
template<typename T>
void deserialize(T &data, std::istream &stream) Deserialize trivially copyable data from input stream and write to output reference.
- Template Parameters:
T – output data type
- Parameters:
data – output reference to write data
stream – input stream to deserialize
-
template<typename T>
void deserialize(T &data, std::istream &stream) Deserialize non-trivially copyable structure element by element, writing to output reference.
- Template Parameters:
T – output non-trivial aggregate type type
- Parameters:
data – output reference to write data
stream – input stream to deserialize
Variables
-
constexpr std::size_t gMaxRangeSize = 1'000'000'000
Maximum range size that can be serialized.
-
template<std::ranges::range T>