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.