CppSerdes  1.0
A serialization/deserialization library designed with embedded systems in mind
serdes::packet Struct Reference

a serialization/deserialization helper class, with load, store, and stream operators More...

#include <serdes.h>

Public Member Functions

void reset () noexcept
 resets the bit offset to 0 and the status to NO_ERROR
 
template<typename T_pointer , typename std::enable_if< std::is_pointer< T_pointer >::value, int * >::type = nullptr>
 packet (T_pointer array_init, size_t max_elements=~size_t(0), size_t b_offset=0, mode_e m=mode_e::UNSPECIFIED)
 Construct a new packet object from an c style array pointer. More...
 
template<typename T_array , size_t N>
 packet (T_array(&array_init)[N], size_t max_elements=~size_t(0), size_t b_offset=0, mode_e m=mode_e::UNSPECIFIED)
 Construct a new packet object from an c style array pointer. More...
 
template<typename T_sized_pointer , typename std::enable_if< serdes::detail::is_sized_pointer< T_sized_pointer >::value, int * >::type = nullptr>
 packet (T_sized_pointer array_init, size_t b_offset=0, mode_e m=mode_e::UNSPECIFIED)
 Construct a new packet object from an sized_pointer array for size safety. More...
 
void pad (const size_t bits)
 moves the bit offset head the specified bits More...
 
void align (size_t bits)
 aligns (increases) the bit offset to a multiple of the specified bits More...
 
template<typename T , size_t N>
void load (T(&value)[N], size_t bits=detail::default_bitsize< T >::value)
 [[deserialize]] loads from serial buffer into the passed array of values More...
 
template<typename T , typename std::enable_if<!detail::is_format_modifier< T >::value, int * >::type = nullptr>
void load (T &value, size_t bits=detail::default_bitsize< T >::value)
 [[deserialize]] loads from serial buffer into the passed value reference More...
 
template<typename T , typename std::enable_if< std::is_rvalue_reference< T && >::value &&!std::is_base_of< packet_base, T >::value, int * >::type = nullptr>
void load (T &&value, size_t bits=detail::default_bitsize< T >::value)
 [[deserialize]] loads from serial buffer into the passed value rvalue NOTE: using this method will cause a status_e::NO_LOAD_TO_RVALUE error
 
void load (formatter &value)
 [[deserialize]] loads from serial buffer into a formatter reference More...
 
void load (formatter &&value)
 [[deserialize]] loads from serial buffer into a formatter rvalue More...
 
template<typename T , typename std::enable_if<!detail::is_format_modifier< T >::value, int * >::type = nullptr>
void load (delimited_array< T > &value, size_t bits=detail::default_bitsize< T >::value)
 [[deserialize]] loads from serial buffer into a delimited_array reference More...
 
template<typename T , typename std::enable_if< std::is_base_of< packet_base, T >::value, int * >::type = nullptr>
void load (delimited_array< T > &value)
 [[deserialize]] loads from serial buffer into a delimited_array<packet_base> reference More...
 
template<typename T >
void load (delimited_array< T > &&value)
 [[deserialize]] loads from serial buffer into a delimited_array<T> reference More...
 
template<typename T , typename T2 , typename std::enable_if<!detail::is_format_modifier< T >::value, int * >::type = nullptr>
void load (array< T, T2 > &value, size_t bits=detail::default_bitsize< T >::value)
 [[deserialize]] loads from serial buffer into a array<T1, T2> reference More...
 
template<typename T , typename T2 , typename std::enable_if< std::is_base_of< packet_base, T >::value, int * >::type = nullptr>
void load (array< T, T2 > &value)
 [[deserialize]] loads from serial buffer into a array<packet_base, T2> reference More...
 
template<typename T , typename T2 >
void load (array< T, T2 > &&value)
 [[deserialize]] loads from serial buffer into a array<T, T2> forwarding reference More...
 
template<typename ST >
void load (const serdes::pad< ST > padding)
 [[deserialize, pad]] applies a padding step to the load process More...
 
template<typename ST >
void load (const serdes::align< ST > alignment)
 [[deserialize, align]] applies an alignment step to the load process More...
 
template<typename T , typename ST >
void load (bitpack< T, ST > &&value)
 [[deserialize]] loads from serial buffer into a bitpack<T, ST> rvalue More...
 
template<typename T , typename ST >
void load (bitpack< T, ST > &value)
 [[deserialize]] loads from serial buffer into a bitpack<T, ST> reference More...
 
void load (packet_base &value)
 [[deserialize]] loads from serial buffer into a packet_base reference More...
 
void load (packet_base &&value)
 [[deserialize]] loads from serial buffer into a packet_base rvalue More...
 
template<typename T , typename std::enable_if<!detail::is_format_modifier< T >::value, int * >::type = nullptr>
void store (const T &value, size_t bits=detail::default_bitsize< T >::value)
 [[serialize]] stores a value reference into a serial buffer More...
 
template<typename T , size_t N>
void store (const T(&value)[N], size_t bits=detail::default_bitsize< T >::value)
 [[serialize]] stores a raw array reference into a serial buffer More...
 
template<typename T , size_t N>
void store (const T(&&value)[N], size_t bits=detail::default_bitsize< T >::value)
 [[serialize]] stores a raw array rvalue into a serial buffer More...
 
template<typename T , typename std::enable_if<!detail::is_format_modifier< T >::value, int * >::type = nullptr>
void store (const delimited_array< T > &value, size_t bits=detail::default_bitsize< T >::value)
 [[serialize]] stores a delimited_array reference into a serial buffer More...
 
template<typename T , typename std::enable_if< std::is_base_of< packet_base, T >::value, int * >::type = nullptr>
void store (const delimited_array< T > &value)
 [[serialize]] stores a delimited_array<packet_base> reference into a serial buffer More...
 
template<typename T >
void store (const delimited_array< T > &&value)
 [[serialize]] stores a delimited_array<packet_base> rvalue into a serial buffer More...
 
template<typename T , typename T2 , typename std::enable_if<!detail::is_format_modifier< T >::value, int * >::type = nullptr>
void store (const array< T, T2 > &value, size_t bits=detail::default_bitsize< T >::value)
 [[serialize]] stores an array<T1, T2> reference into a serial buffer More...
 
template<typename T , typename T2 , typename std::enable_if< std::is_base_of< packet_base, T >::value, int * >::type = nullptr>
void store (const array< T, T2 > &value)
 [[serialize]] stores an array<packet_base, T2> reference into a serial buffer More...
 
template<typename T , typename T2 >
void store (const array< T, T2 > &&value)
 [[serialize]] stores an array<T, T2> rvalue into a serial buffer More...
 
void store (const formatter &value)
 [[serialize]] stores a formatter reference into a serial buffer More...
 
void store (const formatter &&value)
 [[serialize]] stores a formatter rvalue into a serial buffer More...
 
template<typename ST >
void store (const serdes::pad< ST > padding)
 [[serialize, pad]] applies a padding step to the store process More...
 
template<typename ST >
void store (const serdes::align< ST > alignment)
 [[serialize, align]] applies an alignment step to the store process More...
 
template<typename T , typename ST >
void store (const bitpack< T, ST > &&value)
 [[serialize]] stores a bitpack<T, ST> rvalue into a serial buffer More...
 
template<typename T , typename ST >
void store (const bitpack< T, ST > &value)
 [[serialize]] stores a bitpack<T, ST> reference into a serial buffer More...
 
void store (const packet_base &value)
 [[serialize]] stores a packet_base reference into a serial buffer More...
 
void store (const packet_base &&value)
 [[serialize]] stores a packet_base rvalue into a serial buffer More...
 
template<typename T >
packetoperator>> (T &&x)
 [[deserialize]] loads serial data into the passed value (same as load) More...
 
template<typename T >
packetoperator<< (T &&x)
 [[serialize]] stores the passed value into the serial data (same as store) More...
 
template<typename T >
void add (T &&x, size_t bits)
 adds a referenced field to the serial format for both serialization and deserialization More...
 
template<typename T , size_t N>
void add (T(&x)[N], size_t bits)
 adds an array field to the serial format for both serialization and deserialization More...
 
template<typename T >
void add (T &&x)
 adds a referenced field to the serial format for both serialization and deserialization More...
 
template<typename T , size_t N>
void add (T(&x)[N])
 adds an array field to the serial format for both serialization and deserialization More...
 
template<typename T >
void add (T &value, const std::function< bool()> &validation)
 adds a referenced field to the serial format for both serialization and deserialization along with a validation process to run before serialization, and/or after deserialization More...
 
template<typename T >
void add (T &&value, std::function< bool()> &&validation)
 adds a referenced field to the serial format for both serialization and deserialization along with a validation process to run before serialization, and/or after deserialization More...
 
template<typename T >
packetoperator+ (T &&value)
 adds a field to the serial format for both serialization and deserialization (same as packet.add()) More...
 

Public Attributes

serdes::sized_pointer< void > buffer
 underlying buffer to serialize/deserialize to/from
 
size_t bit_offset
 current bit offset in the serdes process
 
mode_e mode
 the serdes mode (LOADING, STORING, or UNSPECIFIED)
 
status_e status = status_e::NO_ERROR
 the current error status of the serdes process
 
const size_t bit_capacity
 buffer.bit_capacity() value
 

Detailed Description

Constructor & Destructor Documentation

template<typename T_pointer , typename std::enable_if< std::is_pointer< T_pointer >::value, int * >::type = nullptr>
serdes::packet::packet ( T_pointer  array_init,
size_t  max_elements = ~size_t(0),
size_t  b_offset = 0,
mode_e  m = mode_e::UNSPECIFIED 
)
inline

Construct a new packet object from an c style array pointer.

Template Parameters
T_pointerthe array's base pointer type
Parameters
array_initan array pointer (without size)
max_elementsthe maximum number of elements to use in the array
b_offsetbit offset to start serdes process at
mstarting mode (LOADING/STORING/UNSPECIFIED)
template<typename T_array , size_t N>
serdes::packet::packet ( T_array(&)  array_init[N],
size_t  max_elements = ~size_t(0),
size_t  b_offset = 0,
mode_e  m = mode_e::UNSPECIFIED 
)
inline

Construct a new packet object from an c style array pointer.

Template Parameters
T_arraythe array's base type
Parameters
array_initan array pointer (without size)
max_elementsthe maximum number of elements to use in the array (can be <= N)
b_offsetbit offset to start serdes process at
mstarting mode (LOADING/STORING/UNSPECIFIED)
template<typename T_sized_pointer , typename std::enable_if< serdes::detail::is_sized_pointer< T_sized_pointer >::value, int * >::type = nullptr>
serdes::packet::packet ( T_sized_pointer  array_init,
size_t  b_offset = 0,
mode_e  m = mode_e::UNSPECIFIED 
)
inline

Construct a new packet object from an sized_pointer array for size safety.

Template Parameters
T_sized_pointerthe array's sized_pointer type
Parameters
array_initan array with size information
b_offsetbit offset to start serdes process at
mstarting mode (LOADING/STORING/UNSPECIFIED)

Member Function Documentation

template<typename T >
void serdes::packet::add ( T &&  x,
size_t  bits 
)
inline

adds a referenced field to the serial format for both serialization and deserialization

Template Parameters
Tvalue type
Parameters
xvalue
bitsnumber of bits to store/load the value into/out-of
Examples:
05_nested_object_oriented_serial.cpp, and 08_error_handling.cpp.
template<typename T , size_t N>
void serdes::packet::add ( T(&)  x[N],
size_t  bits 
)
inline

adds an array field to the serial format for both serialization and deserialization

Template Parameters
Tvalue type
Parameters
xvalue
bitsnumber of bits to store/load the value into/out-of
template<typename T >
void serdes::packet::add ( T &&  x)
inline

adds a referenced field to the serial format for both serialization and deserialization

Template Parameters
Tvalue type
Parameters
xvalue
template<typename T , size_t N>
void serdes::packet::add ( T(&)  x[N])
inline

adds an array field to the serial format for both serialization and deserialization

Template Parameters
Tvalue type
Parameters
xvalue
template<typename T >
void serdes::packet::add ( T &  value,
const std::function< bool()> &  validation 
)
inline

adds a referenced field to the serial format for both serialization and deserialization along with a validation process to run before serialization, and/or after deserialization

Template Parameters
Tvalue type
Parameters
valuevalue
validationfunction that returns true if the field is valid, false to abort the process
template<typename T >
void serdes::packet::add ( T &&  value,
std::function< bool()> &&  validation 
)
inline

adds a referenced field to the serial format for both serialization and deserialization along with a validation process to run before serialization, and/or after deserialization

Template Parameters
Tvalue type
Parameters
valuevalue
validationfunction that returns true if the field is valid, false to abort the process
void serdes::packet::align ( size_t  bits)
inline

aligns (increases) the bit offset to a multiple of the specified bits

Parameters
bitsnumber of bits to align to
Examples:
03_serial_usage.cpp.
template<typename T , size_t N>
void serdes::packet::load ( T(&)  value[N],
size_t  bits = detail::default_bitsize<T>::value 
)
inline

[[deserialize]] loads from serial buffer into the passed array of values

Template Parameters
Ttype of the target value to load into
Nmaximum number of values to load into
Parameters
valuetarget value to load into
bitsnumber of bits per value element
Examples:
03_serial_usage.cpp, and 07_delimited_arrays.cpp.
template<typename T , typename std::enable_if<!detail::is_format_modifier< T >::value, int * >::type = nullptr>
void serdes::packet::load ( T &  value,
size_t  bits = detail::default_bitsize<T>::value 
)
inline

[[deserialize]] loads from serial buffer into the passed value reference

Template Parameters
Ttype of the target value to load into
Parameters
valuetarget value to load into
bitsnumber of bits per value
void serdes::packet::load ( formatter value)
inline

[[deserialize]] loads from serial buffer into a formatter reference

Parameters
valuetarget formatter reference to load into
void serdes::packet::load ( formatter &&  value)
inline

[[deserialize]] loads from serial buffer into a formatter rvalue

Parameters
valuetarget formatter rvalue to load into
template<typename T , typename std::enable_if<!detail::is_format_modifier< T >::value, int * >::type = nullptr>
void serdes::packet::load ( delimited_array< T > &  value,
size_t  bits = detail::default_bitsize<T>::value 
)
inline

[[deserialize]] loads from serial buffer into a delimited_array reference

Template Parameters
Tunderlying type of the delimited_array
Parameters
valuereferenced delimited_array
bitsnumber of bits per element
template<typename T , typename std::enable_if< std::is_base_of< packet_base, T >::value, int * >::type = nullptr>
void serdes::packet::load ( delimited_array< T > &  value)
inline

[[deserialize]] loads from serial buffer into a delimited_array<packet_base> reference

Template Parameters
Tunderlying type of the delimited_array
Parameters
valuereferenced delimited_array
template<typename T >
void serdes::packet::load ( delimited_array< T > &&  value)
inline

[[deserialize]] loads from serial buffer into a delimited_array<T> reference

Template Parameters
Tunderlying type of the delimited_array
Parameters
valuereferenced delimited_array
template<typename T , typename T2 , typename std::enable_if<!detail::is_format_modifier< T >::value, int * >::type = nullptr>
void serdes::packet::load ( array< T, T2 > &  value,
size_t  bits = detail::default_bitsize<T>::value 
)
inline

[[deserialize]] loads from serial buffer into a array<T1, T2> reference

Template Parameters
Tunderlying type of the array
T2underlying size type of the array
Parameters
valuereferenced array
bitsnumber of bits per element
template<typename T , typename T2 , typename std::enable_if< std::is_base_of< packet_base, T >::value, int * >::type = nullptr>
void serdes::packet::load ( array< T, T2 > &  value)
inline

[[deserialize]] loads from serial buffer into a array<packet_base, T2> reference

Template Parameters
Tunderlying type of the array (must be derived from packet_base)
T2underlying size type of the array
Parameters
valuereferenced array
template<typename T , typename T2 >
void serdes::packet::load ( array< T, T2 > &&  value)
inline

[[deserialize]] loads from serial buffer into a array<T, T2> forwarding reference

Template Parameters
Tunderlying type of the array
T2underlying size type of the array
Parameters
valuereferenced array
template<typename ST >
void serdes::packet::load ( const serdes::pad< ST >  padding)
inline

[[deserialize, pad]] applies a padding step to the load process

Template Parameters
STsize type of the pad
Parameters
paddingpad value
template<typename ST >
void serdes::packet::load ( const serdes::align< ST >  alignment)
inline

[[deserialize, align]] applies an alignment step to the load process

Template Parameters
STsize type of the align
Parameters
alignmentalign value
template<typename T , typename ST >
void serdes::packet::load ( bitpack< T, ST > &&  value)
inline

[[deserialize]] loads from serial buffer into a bitpack<T, ST> rvalue

Template Parameters
T,underlying type of the bitpack object
STunderlying size type of the bitpack object
Parameters
valuereferenced bitpack rvalue
template<typename T , typename ST >
void serdes::packet::load ( bitpack< T, ST > &  value)
inline

[[deserialize]] loads from serial buffer into a bitpack<T, ST> reference

Template Parameters
Tunderlying type of the bitpack object
STunderlying size type of the bitpack object
Parameters
valuereferenced bitpack reference
void serdes::packet::load ( packet_base value)
inline

[[deserialize]] loads from serial buffer into a packet_base reference

Parameters
valuereferenced packet_base reference
void serdes::packet::load ( packet_base &&  value)
inline

[[deserialize]] loads from serial buffer into a packet_base rvalue

Parameters
valuereferenced packet_base rvalue
template<typename T >
packet& serdes::packet::operator+ ( T &&  value)
inline

adds a field to the serial format for both serialization and deserialization (same as packet.add())

Template Parameters
Tvalue type
Parameters
valuevalue
Returns
packet&: modified packet process after the add
template<typename T >
packet& serdes::packet::operator<< ( T &&  x)
inline

[[serialize]] stores the passed value into the serial data (same as store)

Template Parameters
Tvalue type
Parameters
xvalue
Returns
packet&: resulting modified packet process
template<typename T >
packet& serdes::packet::operator>> ( T &&  x)
inline

[[deserialize]] loads serial data into the passed value (same as load)

Template Parameters
Tvalue type
Parameters
xvalue reference
Returns
packet&: resulting modified packet process
void serdes::packet::pad ( const size_t  bits)
inline

moves the bit offset head the specified bits

Parameters
bitsnumber of bits to pad
Examples:
03_serial_usage.cpp, and 05_nested_object_oriented_serial.cpp.
template<typename T , typename std::enable_if<!detail::is_format_modifier< T >::value, int * >::type = nullptr>
void serdes::packet::store ( const T &  value,
size_t  bits = detail::default_bitsize<T>::value 
)
inline

[[serialize]] stores a value reference into a serial buffer

Template Parameters
Tvalue type
Parameters
valuevalue to store
bitsbits per value
Examples:
03_serial_usage.cpp.
template<typename T , size_t N>
void serdes::packet::store ( const T(&)  value[N],
size_t  bits = detail::default_bitsize<T>::value 
)
inline

[[serialize]] stores a raw array reference into a serial buffer

Template Parameters
Tarray base type
Narray size
Parameters
valuevalue to store
bitsbits per value element
template<typename T , size_t N>
void serdes::packet::store ( const T(&&)  value[N],
size_t  bits = detail::default_bitsize<T>::value 
)
inline

[[serialize]] stores a raw array rvalue into a serial buffer

Template Parameters
Tarray base type
Narray size
Parameters
valuevalue to store
bitsbits per value element
template<typename T , typename std::enable_if<!detail::is_format_modifier< T >::value, int * >::type = nullptr>
void serdes::packet::store ( const delimited_array< T > &  value,
size_t  bits = detail::default_bitsize<T>::value 
)
inline

[[serialize]] stores a delimited_array reference into a serial buffer

Template Parameters
Tdelimited_array base type
Parameters
valuevalue to store
bitsbits per value element
template<typename T , typename std::enable_if< std::is_base_of< packet_base, T >::value, int * >::type = nullptr>
void serdes::packet::store ( const delimited_array< T > &  value)
inline

[[serialize]] stores a delimited_array<packet_base> reference into a serial buffer

Template Parameters
Tdelimited_array base type (must be derived from packet_base)
Parameters
valuevalue to store
template<typename T >
void serdes::packet::store ( const delimited_array< T > &&  value)
inline

[[serialize]] stores a delimited_array<packet_base> rvalue into a serial buffer

Template Parameters
Tdelimited_array base type (must be derived from packet_base)
Parameters
valuevalue to store
template<typename T , typename T2 , typename std::enable_if<!detail::is_format_modifier< T >::value, int * >::type = nullptr>
void serdes::packet::store ( const array< T, T2 > &  value,
size_t  bits = detail::default_bitsize<T>::value 
)
inline

[[serialize]] stores an array<T1, T2> reference into a serial buffer

Template Parameters
Tarray base type
T2array size type
Parameters
valuevalue to store
bitsbits per value element
template<typename T , typename T2 , typename std::enable_if< std::is_base_of< packet_base, T >::value, int * >::type = nullptr>
void serdes::packet::store ( const array< T, T2 > &  value)
inline

[[serialize]] stores an array<packet_base, T2> reference into a serial buffer

Template Parameters
Tarray base type (must be derived from packet_base)
T2array size type
Parameters
valuevalue to store
template<typename T , typename T2 >
void serdes::packet::store ( const array< T, T2 > &&  value)
inline

[[serialize]] stores an array<T, T2> rvalue into a serial buffer

Template Parameters
Tarray base type
T2array size type
Parameters
valuevalue to store
void serdes::packet::store ( const formatter value)
inline

[[serialize]] stores a formatter reference into a serial buffer

Parameters
valuevalue to store
void serdes::packet::store ( const formatter &&  value)
inline

[[serialize]] stores a formatter rvalue into a serial buffer

Parameters
valuevalue to store
template<typename ST >
void serdes::packet::store ( const serdes::pad< ST >  padding)
inline

[[serialize, pad]] applies a padding step to the store process

Template Parameters
STsize type of the pad
Parameters
paddingpad value
template<typename ST >
void serdes::packet::store ( const serdes::align< ST >  alignment)
inline

[[serialize, align]] applies an alignment step to the store process

Template Parameters
STsize type of the align
Parameters
alignmentalign value
template<typename T , typename ST >
void serdes::packet::store ( const bitpack< T, ST > &&  value)
inline

[[serialize]] stores a bitpack<T, ST> rvalue into a serial buffer

Template Parameters
Tthe type of the underlying bitpacked object
STunderlying size type of the bitpack object
Parameters
valuevalue to store
template<typename T , typename ST >
void serdes::packet::store ( const bitpack< T, ST > &  value)
inline

[[serialize]] stores a bitpack<T, ST> reference into a serial buffer

Template Parameters
Tthe type of the underlying bitpacked object
STunderlying size type of the bitpack object
Parameters
valuevalue to store
void serdes::packet::store ( const packet_base value)
inline

[[serialize]] stores a packet_base reference into a serial buffer

Parameters
valuevalue to store
void serdes::packet::store ( const packet_base &&  value)
inline

[[serialize]] stores a packet_base rvalue into a serial buffer

Parameters
valuevalue to store

The documentation for this struct was generated from the following file: