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...
 
template<typename T_array , detail::requires_data_and_size< T_array > * = nullptr>
 packet (T_array &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 a reference to any container with a data() and size() method For example, a std::array, or a std::vector. More...
 
void pad (const size_t bits) noexcept
 moves the bit offset head the specified bits More...
 
void align (size_t bits) noexcept
 aligns (increases) the bit offset to a multiple of the specified bits More...
 
template<typename T , size_t N>
CPP_SERDES_LIB_PACKET_API_INLINE1 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::has_data_and_size< typename detail::remove_cvref_cpp11< T >::type >::value &&!detail::has_custom_type_override< typename detail::remove_cvref_cpp11< T >::type >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void load (T &&value, size_t bits=detail::default_bitsize< typename detail::has_data_and_size< typename detail::remove_cvref_cpp11< T >::type >::elem_type >::value)
 [[deserialize]] loads from serial buffer into the passed reference to a data container (any object with a size() and data() method). More...
 
template<typename T , typename std::enable_if< !detail::is_format_modifier< typename detail::remove_cvref_cpp11< T >::type >::value &&detail::supported_by_bitcpy< typename detail::remove_cvref_cpp11< T >::type >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE1 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< detail::has_custom_type_with_bit_support< typename detail::remove_cvref_cpp11< T >::type >::value &&(detail::has_custom_type_override< typename detail::remove_cvref_cpp11< T >::type >::value||(!detail::is_format_modifier< typename detail::remove_cvref_cpp11< T >::type >::value &&!detail::supported_by_bitcpy< typename detail::remove_cvref_cpp11< T >::type >::value &&!std::is_array< typename detail::remove_cvref_cpp11< T >::type >::value &&!detail::has_load_and_store< typename detail::remove_cvref_cpp11< T >::type >::value &&!detail::has_data_and_size< typename detail::remove_cvref_cpp11< T >::type >::value)), int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void load (T &&value, size_t bits=custom_type< typename detail::remove_cvref_cpp11< T >::type >::default_bits)
 [[deserialize]] loads from serial buffer into a "custom_type" overriden type, specifically when it supports bitpacking support (accepts bits as an argument and defines a default bit size value for the item). More...
 
template<typename T , typename std::enable_if< detail::has_custom_type_without_bit_support< typename detail::remove_cvref_cpp11< T >::type >::value &&(detail::has_custom_type_override< typename detail::remove_cvref_cpp11< T >::type >::value||(!detail::is_format_modifier< typename detail::remove_cvref_cpp11< T >::type >::value &&!detail::supported_by_bitcpy< typename detail::remove_cvref_cpp11< T >::type >::value &&!std::is_array< typename detail::remove_cvref_cpp11< T >::type >::value &&!detail::has_load_and_store< typename detail::remove_cvref_cpp11< T >::type >::value &&!detail::has_data_and_size< typename detail::remove_cvref_cpp11< T >::type >::value)), int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void load (T &&value)
 [[deserialize]] loads from serial buffer into a "custom_type" overriden type, specifically when it does not support bitpacking (does not use bits as an argument). More...
 
template<typename T , typename std::enable_if< detail::has_format_method< T >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void load (T &&value)
 [[deserialize]] loads from serial buffer into type that has a "void format(serdes::packet&)" method. More...
 
template<typename T , typename std::enable_if< detail::has_load_and_store< typename detail::remove_cvref_cpp11< T >::type >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE1 void load (T &&value)
 [[deserialize]] loads from serial buffer into a type that has both a "T load()" and "void store(T)" method. More...
 
template<typename T , typename std::enable_if< std::is_rvalue_reference< T && >::value &&detail::supported_by_bitcpy< T >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 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
 
template<typename T , typename std::enable_if< detail::is_formatter< typename detail::remove_cvref_cpp11< T >::type >::value, int * >::type * = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void load (T &&value)
 [[deserialize]] loads from serial buffer into a formatter reference More...
 
template<typename T , typename std::enable_if<!detail::is_format_modifier< typename delimited_array< T >::elem_type >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void load (delimited_array< T > &value, size_t bits=detail::default_bitsize< typename delimited_array< T >::elem_type >::value)
 [[deserialize]] loads from serial buffer into a delimited_array reference More...
 
template<typename T , typename std::enable_if< detail::has_format_method< typename delimited_array< T >::elem_type >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void load (delimited_array< T > &value)
 [[deserialize]] loads from serial buffer into a delimited_array<InnerType> reference where the InnerType has a "void format(packet&)" method. More...
 
template<typename T >
CPP_SERDES_LIB_PACKET_API_INLINE1 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< typename serdes::array< T, T2 >::elem_type >::value &&detail::supported_by_bitcpy< typename serdes::array< T, T2 >::elem_type >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void load (serdes::array< T, T2 > &value, size_t bits=detail::default_bitsize< typename serdes::array< T, T2 >::elem_type >::value)
 [[deserialize]] loads from serial buffer into a array<T1, T2> reference More...
 
template<typename T , typename T2 , typename std::enable_if< !detail::is_format_modifier< typename serdes::array< T, T2 >::elem_type >::value &&!detail::supported_by_bitcpy< typename serdes::array< T, T2 >::elem_type >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void load (serdes::array< T, T2 > &value, size_t bits=detail::default_bitsize< typename serdes::array< T, T2 >::elem_type >::value)
 [[deserialize]] loads from serial buffer into a array<T1, T2> reference More...
 
template<typename T , typename T2 , typename std::enable_if< detail::has_format_method< typename serdes::array< T, T2 >::elem_type >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void load (serdes::array< T, T2 > &value)
 [[deserialize]] loads from serial buffer into a array<packet_base, T2> reference More...
 
template<typename T , typename T2 >
CPP_SERDES_LIB_PACKET_API_INLINE1 void load (serdes::array< T, T2 > &&value)
 [[deserialize]] loads from serial buffer into a array<T, T2> forwarding reference More...
 
template<typename ST >
CPP_SERDES_LIB_PACKET_API_INLINE2 void load (const serdes::pad< ST > padding)
 [[deserialize, pad]] applies a padding step to the load process More...
 
template<typename ST >
CPP_SERDES_LIB_PACKET_API_INLINE2 void load (const serdes::align< ST > alignment)
 [[deserialize, align]] applies an alignment step to the load process More...
 
template<typename T , typename ST >
CPP_SERDES_LIB_PACKET_API_INLINE1 void load (bitpack< T, ST > &&value)
 [[deserialize]] loads from serial buffer into a bitpack<T, ST> rvalue More...
 
template<typename T , typename ST >
CPP_SERDES_LIB_PACKET_API_INLINE1 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< typename detail::remove_cvref_cpp11< T >::type >::value &&detail::supported_by_bitcpy< typename detail::remove_cvref_cpp11< T >::type >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE1 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 , typename std::enable_if< detail::has_custom_type_with_bit_support< typename detail::remove_cvref_cpp11< T >::type >::value &&(detail::has_custom_type_override< typename detail::remove_cvref_cpp11< T >::type >::value||(!detail::is_format_modifier< typename detail::remove_cvref_cpp11< T >::type >::value &&!detail::supported_by_bitcpy< typename detail::remove_cvref_cpp11< T >::type >::value &&!std::is_array< typename detail::remove_cvref_cpp11< T >::type >::value &&!detail::has_load_and_store< typename detail::remove_cvref_cpp11< T >::type >::value &&!detail::has_data_and_size< typename detail::remove_cvref_cpp11< T >::type >::value)), int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void store (T &&value, size_t bits=custom_type< typename detail::remove_cvref_cpp11< T >::type >::default_bits)
 [[serialize]] stores a "custom_type" overriden type into a serial buffer, specifically when it supports bitpacking support (accepts bits as an argument and defines a default bit size value for the item). More...
 
template<typename T , typename std::enable_if< detail::has_custom_type_without_bit_support< typename detail::remove_cvref_cpp11< T >::type >::value &&(detail::has_custom_type_override< typename detail::remove_cvref_cpp11< T >::type >::value||(!detail::is_format_modifier< typename detail::remove_cvref_cpp11< T >::type >::value &&!detail::supported_by_bitcpy< typename detail::remove_cvref_cpp11< T >::type >::value &&!std::is_array< typename detail::remove_cvref_cpp11< T >::type >::value &&!detail::has_load_and_store< typename detail::remove_cvref_cpp11< T >::type >::value &&!detail::has_data_and_size< typename detail::remove_cvref_cpp11< T >::type >::value)), int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void store (T &&value)
 [[serialize]] stores a "custom_type" overriden type into a serial buffer, specifically when it does not support bitpacking (does not use bits as an argument). More...
 
template<typename T , typename std::enable_if< detail::has_format_method< T >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void store (T &&value)
 [[serialize]] stores a type that has a "void format(serdes::packet&)" method into a serial buffer. More...
 
template<typename T , typename std::enable_if< detail::has_load_and_store< typename detail::remove_cvref_cpp11< T >::type >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE1 void store (T &&value)
 [[serialize]] stores a type that has both "T load()" and "void store(T)" methods into a serial buffer. More...
 
template<typename T , size_t N>
CPP_SERDES_LIB_PACKET_API_INLINE1 void store (const T(&value)[N], size_t bits=detail::default_bitsize< T >::value)
 [[serialize]] stores a raw c-array reference into a serial buffer More...
 
template<typename T , typename std::enable_if< detail::has_data_and_size< typename detail::remove_cvref_cpp11< T >::type >::value &&!detail::has_custom_type_override< typename detail::remove_cvref_cpp11< T >::type >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void store (T &&value, size_t bits=detail::default_bitsize< typename detail::has_data_and_size< typename detail::remove_cvref_cpp11< T >::type >::elem_type >::value)
 [[serialize]] stores any array-like container with "T* data()" and "size_t size()" methods into a serial buffer by treating it like a serdes::array. For example, a std::array, or std::vector. More...
 
template<typename T , size_t N>
CPP_SERDES_LIB_PACKET_API_INLINE1 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< typename delimited_array< T >::elem_type >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void store (const delimited_array< T > &value, size_t bits=detail::default_bitsize< typename delimited_array< T >::elem_type >::value)
 [[serialize]] stores a delimited_array reference into a serial buffer More...
 
template<typename T , typename std::enable_if< detail::has_format_method< typename delimited_array< T >::elem_type >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void store (const delimited_array< T > &value)
 [[serialize]] stores a delimited_array<packet_base> reference into a serial buffer More...
 
template<typename T >
CPP_SERDES_LIB_PACKET_API_INLINE1 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< typename serdes::array< T, T2 >::elem_type >::value &&detail::supported_by_bitcpy< typename serdes::array< T, T2 >::elem_type >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void store (const serdes::array< T, T2 > &value, size_t bits=detail::default_bitsize< typename serdes::array< T, T2 >::elem_type >::value)
 [[serialize]] stores an array<T1, T2> reference into a serial buffer More...
 
template<typename T , typename T2 , typename std::enable_if< !detail::is_format_modifier< typename serdes::array< T, T2 >::elem_type >::value &&!detail::supported_by_bitcpy< typename serdes::array< T, T2 >::elem_type >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void store (const serdes::array< T, T2 > &value, size_t bits=detail::default_bitsize< typename serdes::array< T, T2 >::elem_type >::value)
 [[serialize]] stores an array<T1, T2> reference into a serial buffer More...
 
template<typename T , typename T2 , typename std::enable_if< detail::has_format_method< typename serdes::array< T, T2 >::elem_type >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void store (const serdes::array< T, T2 > &value)
 [[serialize]] stores an array<packet_base, T2> reference into a serial buffer More...
 
template<typename T , typename T2 >
CPP_SERDES_LIB_PACKET_API_INLINE1 void store (const array< T, T2 > &&value)
 [[serialize]] stores an array<T, T2> rvalue into a serial buffer More...
 
template<typename T , typename std::enable_if< detail::is_formatter< typename detail::remove_cvref_cpp11< T >::type >::value, int * >::type * = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void store (T &&value)
 [[serialize]] stores a formatter reference into a serial buffer More...
 
template<typename ST >
CPP_SERDES_LIB_PACKET_API_INLINE1 void store (const serdes::pad< ST > padding)
 [[serialize, pad]] applies a padding step to the store process More...
 
template<typename ST >
CPP_SERDES_LIB_PACKET_API_INLINE1 void store (const serdes::align< ST > alignment)
 [[serialize, align]] applies an alignment step to the store process More...
 
template<typename T , typename ST >
CPP_SERDES_LIB_PACKET_API_INLINE1 void store (const bitpack< T, ST > &&value)
 [[serialize]] stores a bitpack<T, ST> rvalue into a serial buffer More...
 
template<typename T , typename ST >
CPP_SERDES_LIB_PACKET_API_INLINE1 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 >
CPP_SERDES_LIB_PACKET_API_INLINE1 packetoperator>> (T &&x)
 [[deserialize]] loads serial data into the passed value (same as load) More...
 
template<typename T >
CPP_SERDES_LIB_PACKET_API_INLINE1 packetoperator<< (T &&x)
 [[serialize]] stores the passed value into the serial data (same as store) More...
 
template<typename T >
CPP_SERDES_LIB_PACKET_API_INLINE1 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>
CPP_SERDES_LIB_PACKET_API_INLINE1 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 , typename std::enable_if< !detail::is_validator< typename detail::remove_cvref_cpp11< T >::type >::value, int * >::type * = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE1 void add (T &&x)
 adds a referenced field to the serial format for both serialization and deserialization More...
 
template<typename T , size_t N>
CPP_SERDES_LIB_PACKET_API_INLINE1 void add (T(&x)[N])
 adds an array field to the serial format for both serialization and deserialization More...
 
template<typename T , typename F >
CPP_SERDES_LIB_PACKET_API_INLINE1 void add (T &&value, F &&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 , typename std::enable_if< detail::is_validator< typename detail::remove_cvref_cpp11< T >::type >::value, int * >::type * = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE1 void add (T &&value)
 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 via a "serdes::validate(field, validation_function)" object. Note that validate can nest other formatters, but must be the most outside specified formatter, since the validation should occur before/after the other format processes, for example: "packet + serdes::validate(serdes::bitpack(field, 7), []{ return field > 5u; })" More...
 
template<typename T >
CPP_SERDES_LIB_PACKET_API_INLINE1 packetoperator+ (T &&value)
 adds a field to the serial format for both serialization and deserialization (same as packet.add()) More...
 
byte_iterator_type byte_iterator (starting_byte_index start, number_of_bytes size)
 Will return an iterator to the raw serial bytes in the packet over a selected range. More...
 
byte_iterator_type previous_bytes (starting_byte_index start)
 Will return an iterator to the raw serial bytes in the packet starting at the specified location and ending at the current bit offset. More...
 
byte_iterator_type previous_bytes ()
 Will return an iterator to the raw serial bytes in the packet starting at the beginning of the packet and ending at the current bit offset. 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

◆ packet() [1/4]

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)

◆ packet() [2/4]

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)

◆ packet() [3/4]

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)

◆ packet() [4/4]

template<typename T_array , detail::requires_data_and_size< T_array > * = nullptr>
serdes::packet::packet ( T_array &  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 a reference to any container with a data() and size() method For example, a std::array, or a std::vector.

Template Parameters
T_arraythe container type
Parameters
array_initthe container to reference
max_elementsthe maximum number of elements to use in the array (can be <= size())
b_offsetbit offset to start serdes process at
mstarting mode (LOADING/STORING/UNSPECIFIED)

Member Function Documentation

◆ add() [1/6]

template<typename T , typename std::enable_if< detail::is_validator< typename detail::remove_cvref_cpp11< T >::type >::value, int * >::type * = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE1 void serdes::packet::add ( T &&  value)
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 via a "serdes::validate(field, validation_function)" object. Note that validate can nest other formatters, but must be the most outside specified formatter, since the validation should occur before/after the other format processes, for example: "packet + serdes::validate(serdes::bitpack(field, 7), []{ return field > 5u; })"

Template Parameters
Tserdes::validate type
Parameters
valueserdes::validate object

◆ add() [2/6]

template<typename T , typename F >
CPP_SERDES_LIB_PACKET_API_INLINE1 void serdes::packet::add ( T &&  value,
F &&  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

◆ add() [3/6]

template<typename T , typename std::enable_if< !detail::is_validator< typename detail::remove_cvref_cpp11< T >::type >::value, int * >::type * = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE1 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

◆ add() [4/6]

template<typename T >
CPP_SERDES_LIB_PACKET_API_INLINE1 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.

◆ add() [5/6]

template<typename T , size_t N>
CPP_SERDES_LIB_PACKET_API_INLINE1 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

◆ add() [6/6]

template<typename T , size_t N>
CPP_SERDES_LIB_PACKET_API_INLINE1 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

◆ align()

void serdes::packet::align ( size_t  bits)
inlinenoexcept

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

Parameters
bitsnumber of bits to align to
Examples
03_serial_usage.cpp.

◆ byte_iterator()

byte_iterator_type serdes::packet::byte_iterator ( starting_byte_index  start,
number_of_bytes  size 
)
inline

Will return an iterator to the raw serial bytes in the packet over a selected range.

An iterator is needed so that if the serial data need endianness handling you won't need to worry about it, the iterator will abstract that.

Parameters
startthe byte index to start iterating from
size: the number of bytes to iterate over
Returns
byte_iterator_type

◆ load() [1/21]

template<typename T , typename ST >
CPP_SERDES_LIB_PACKET_API_INLINE1 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

◆ load() [2/21]

template<typename T , typename ST >
CPP_SERDES_LIB_PACKET_API_INLINE1 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

◆ load() [3/21]

template<typename ST >
CPP_SERDES_LIB_PACKET_API_INLINE2 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

◆ load() [4/21]

template<typename ST >
CPP_SERDES_LIB_PACKET_API_INLINE2 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

◆ load() [5/21]

template<typename T >
CPP_SERDES_LIB_PACKET_API_INLINE1 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

◆ load() [6/21]

template<typename T , typename std::enable_if< detail::has_format_method< typename delimited_array< T >::elem_type >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void serdes::packet::load ( delimited_array< T > &  value)
inline

[[deserialize]] loads from serial buffer into a delimited_array<InnerType> reference where the InnerType has a "void format(packet&)" method.

Template Parameters
Tunderlying type of the delimited_array
Parameters
valuereferenced delimited_array

◆ load() [7/21]

template<typename T , typename std::enable_if<!detail::is_format_modifier< typename delimited_array< T >::elem_type >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void serdes::packet::load ( delimited_array< T > &  value,
size_t  bits = detail::default_bitsize<typename delimited_array<T>::elem_type>::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

◆ load() [8/21]

void serdes::packet::load ( packet_base &&  value)
inline

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

Parameters
valuereferenced packet_base rvalue

◆ load() [9/21]

void serdes::packet::load ( packet_base value)
inline

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

Parameters
valuereferenced packet_base reference

◆ load() [10/21]

template<typename T , typename T2 >
CPP_SERDES_LIB_PACKET_API_INLINE1 void serdes::packet::load ( serdes::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

◆ load() [11/21]

template<typename T , typename T2 , typename std::enable_if< detail::has_format_method< typename serdes::array< T, T2 >::elem_type >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void serdes::packet::load ( serdes::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 or have a "void format(packet&)" method)
T2underlying size type of the array
Parameters
valuereferenced array

◆ load() [12/21]

template<typename T , typename T2 , typename std::enable_if< !detail::is_format_modifier< typename serdes::array< T, T2 >::elem_type >::value &&detail::supported_by_bitcpy< typename serdes::array< T, T2 >::elem_type >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void serdes::packet::load ( serdes::array< T, T2 > &  value,
size_t  bits = detail::default_bitsize<typename serdes::array<T, T2>::elem_type>::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

◆ load() [13/21]

template<typename T , typename T2 , typename std::enable_if< !detail::is_format_modifier< typename serdes::array< T, T2 >::elem_type >::value &&!detail::supported_by_bitcpy< typename serdes::array< T, T2 >::elem_type >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void serdes::packet::load ( serdes::array< T, T2 > &  value,
size_t  bits = detail::default_bitsize<typename serdes::array<T, T2>::elem_type>::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

◆ load() [14/21]

template<typename T , typename std::enable_if< detail::has_custom_type_without_bit_support< typename detail::remove_cvref_cpp11< T >::type >::value &&(detail::has_custom_type_override< typename detail::remove_cvref_cpp11< T >::type >::value||(!detail::is_format_modifier< typename detail::remove_cvref_cpp11< T >::type >::value &&!detail::supported_by_bitcpy< typename detail::remove_cvref_cpp11< T >::type >::value &&!std::is_array< typename detail::remove_cvref_cpp11< T >::type >::value &&!detail::has_load_and_store< typename detail::remove_cvref_cpp11< T >::type >::value &&!detail::has_data_and_size< typename detail::remove_cvref_cpp11< T >::type >::value)), int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void serdes::packet::load ( T &&  value)
inline

[[deserialize]] loads from serial buffer into a "custom_type" overriden type, specifically when it does not support bitpacking (does not use bits as an argument).

Template Parameters
T: A type with a custom_type<..> definition for deserialization.
Parameters
value: the custom_type value
bits: the number of bits to pack the item into

◆ load() [15/21]

template<typename T , typename std::enable_if< detail::has_format_method< T >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void serdes::packet::load ( T &&  value)
inline

[[deserialize]] loads from serial buffer into type that has a "void format(serdes::packet&)" method.

Template Parameters
T: A type with a "void format(serdes::packet&)" method (does not need to be from packet_base)
Parameters
value: the object to write serial data to

◆ load() [16/21]

template<typename T , typename std::enable_if< detail::has_load_and_store< typename detail::remove_cvref_cpp11< T >::type >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE1 void serdes::packet::load ( T &&  value)
inline

[[deserialize]] loads from serial buffer into a type that has both a "T load()" and "void store(T)" method.

Template Parameters
T: Any type with "T load()" and "void store(T)" methods
Parameters
value: the object to write serial data to

◆ load() [17/21]

template<typename T , typename std::enable_if< detail::is_formatter< typename detail::remove_cvref_cpp11< T >::type >::value, int * >::type * = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void serdes::packet::load ( T &&  value)
inline

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

Parameters
valuetarget formatter reference to load into

◆ load() [18/21]

template<typename T , typename std::enable_if< detail::has_custom_type_with_bit_support< typename detail::remove_cvref_cpp11< T >::type >::value &&(detail::has_custom_type_override< typename detail::remove_cvref_cpp11< T >::type >::value||(!detail::is_format_modifier< typename detail::remove_cvref_cpp11< T >::type >::value &&!detail::supported_by_bitcpy< typename detail::remove_cvref_cpp11< T >::type >::value &&!std::is_array< typename detail::remove_cvref_cpp11< T >::type >::value &&!detail::has_load_and_store< typename detail::remove_cvref_cpp11< T >::type >::value &&!detail::has_data_and_size< typename detail::remove_cvref_cpp11< T >::type >::value)), int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void serdes::packet::load ( T &&  value,
size_t  bits = custom_type<typename detail::remove_cvref_cpp11<T>::type>::default_bits 
)
inline

[[deserialize]] loads from serial buffer into a "custom_type" overriden type, specifically when it supports bitpacking support (accepts bits as an argument and defines a default bit size value for the item).

Template Parameters
T: A type with a custom_type<..> definition for deserialization.
Parameters
value: the custom_type value
bits: the number of bits to pack the item into

◆ load() [19/21]

template<typename T , typename std::enable_if< detail::has_data_and_size< typename detail::remove_cvref_cpp11< T >::type >::value &&!detail::has_custom_type_override< typename detail::remove_cvref_cpp11< T >::type >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void serdes::packet::load ( T &&  value,
size_t  bits = detail::default_bitsize<typename detail::has_data_and_size<typename detail::remove_cvref_cpp11<T>::type>::elem_type>::value 
)
inline

[[deserialize]] loads from serial buffer into the passed reference to a data container (any object with a size() and data() method).

Template Parameters
Ttype of the target value to load into
Parameters
valuetarget value to load into
bitsnumber of bits per element of the container (not of the entire container)

◆ load() [20/21]

template<typename T , typename std::enable_if< !detail::is_format_modifier< typename detail::remove_cvref_cpp11< T >::type >::value &&detail::supported_by_bitcpy< typename detail::remove_cvref_cpp11< T >::type >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE1 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

◆ load() [21/21]

template<typename T , size_t N>
CPP_SERDES_LIB_PACKET_API_INLINE1 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 (not of the entire array)
Examples
03_serial_usage.cpp, and 07_delimited_arrays.cpp.

◆ operator+()

template<typename T >
CPP_SERDES_LIB_PACKET_API_INLINE1 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

◆ operator<<()

template<typename T >
CPP_SERDES_LIB_PACKET_API_INLINE1 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

◆ operator>>()

template<typename T >
CPP_SERDES_LIB_PACKET_API_INLINE1 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

◆ pad()

void serdes::packet::pad ( const size_t  bits)
inlinenoexcept

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.

◆ previous_bytes() [1/2]

byte_iterator_type serdes::packet::previous_bytes ( )
inline

Will return an iterator to the raw serial bytes in the packet starting at the beginning of the packet and ending at the current bit offset.

An iterator is needed so that if the serial data need endianness handling you won't need to worry about it, the iterator will abstract that.

Returns
byte_iterator_type

◆ previous_bytes() [2/2]

byte_iterator_type serdes::packet::previous_bytes ( starting_byte_index  start)
inline

Will return an iterator to the raw serial bytes in the packet starting at the specified location and ending at the current bit offset.

An iterator is needed so that if the serial data need endianness handling you won't need to worry about it, the iterator will abstract that.

Parameters
startthe byte index to start iterating from
Returns
byte_iterator_type

◆ store() [1/22]

template<typename T , typename T2 >
CPP_SERDES_LIB_PACKET_API_INLINE1 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

◆ store() [2/22]

template<typename T , typename ST >
CPP_SERDES_LIB_PACKET_API_INLINE1 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

◆ store() [3/22]

template<typename T , typename ST >
CPP_SERDES_LIB_PACKET_API_INLINE1 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

◆ store() [4/22]

template<typename T >
CPP_SERDES_LIB_PACKET_API_INLINE1 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 or have a "void format(packet&)" method)
Parameters
valuevalue to store

◆ store() [5/22]

template<typename T , typename std::enable_if< detail::has_format_method< typename delimited_array< T >::elem_type >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 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 or have a "void format(packet&)" method)
Parameters
valuevalue to store

◆ store() [6/22]

template<typename T , typename std::enable_if<!detail::is_format_modifier< typename delimited_array< T >::elem_type >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void serdes::packet::store ( const delimited_array< T > &  value,
size_t  bits = detail::default_bitsize<typename delimited_array<T>::elem_type>::value 
)
inline

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

Template Parameters
Tdelimited_array base type
Parameters
valuevalue to store
bitsbits per element of the array

◆ store() [7/22]

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

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

Parameters
valuevalue to store

◆ store() [8/22]

void serdes::packet::store ( const packet_base value)
inline

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

Parameters
valuevalue to store

◆ store() [9/22]

template<typename ST >
CPP_SERDES_LIB_PACKET_API_INLINE1 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

◆ store() [10/22]

template<typename T , typename T2 , typename std::enable_if< detail::has_format_method< typename serdes::array< T, T2 >::elem_type >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void serdes::packet::store ( const serdes::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 or have a "void format(packet&)" method)
T2array size type
Parameters
valuevalue to store

◆ store() [11/22]

template<typename T , typename T2 , typename std::enable_if< !detail::is_format_modifier< typename serdes::array< T, T2 >::elem_type >::value &&detail::supported_by_bitcpy< typename serdes::array< T, T2 >::elem_type >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void serdes::packet::store ( const serdes::array< T, T2 > &  value,
size_t  bits = detail::default_bitsize<typename serdes::array<T, T2>::elem_type>::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

◆ store() [12/22]

template<typename T , typename T2 , typename std::enable_if< !detail::is_format_modifier< typename serdes::array< T, T2 >::elem_type >::value &&!detail::supported_by_bitcpy< typename serdes::array< T, T2 >::elem_type >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void serdes::packet::store ( const serdes::array< T, T2 > &  value,
size_t  bits = detail::default_bitsize<typename serdes::array<T, T2>::elem_type>::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

◆ store() [13/22]

template<typename ST >
CPP_SERDES_LIB_PACKET_API_INLINE1 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

◆ store() [14/22]

template<typename T , typename std::enable_if< !detail::is_format_modifier< typename detail::remove_cvref_cpp11< T >::type >::value &&detail::supported_by_bitcpy< typename detail::remove_cvref_cpp11< T >::type >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE1 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.

◆ store() [15/22]

template<typename T , size_t N>
CPP_SERDES_LIB_PACKET_API_INLINE1 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

◆ store() [16/22]

template<typename T , size_t N>
CPP_SERDES_LIB_PACKET_API_INLINE1 void serdes::packet::store ( const T(&)  value[N],
size_t  bits = detail::default_bitsize<T>::value 
)
inline

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

Template Parameters
Tarray base type
Narray size
Parameters
valuevalue to store
bitsbits per value element

◆ store() [17/22]

template<typename T , typename std::enable_if< detail::has_custom_type_without_bit_support< typename detail::remove_cvref_cpp11< T >::type >::value &&(detail::has_custom_type_override< typename detail::remove_cvref_cpp11< T >::type >::value||(!detail::is_format_modifier< typename detail::remove_cvref_cpp11< T >::type >::value &&!detail::supported_by_bitcpy< typename detail::remove_cvref_cpp11< T >::type >::value &&!std::is_array< typename detail::remove_cvref_cpp11< T >::type >::value &&!detail::has_load_and_store< typename detail::remove_cvref_cpp11< T >::type >::value &&!detail::has_data_and_size< typename detail::remove_cvref_cpp11< T >::type >::value)), int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void serdes::packet::store ( T &&  value)
inline

[[serialize]] stores a "custom_type" overriden type into a serial buffer, specifically when it does not support bitpacking (does not use bits as an argument).

Template Parameters
T: A type with a custom_type<..> definition for deserialization.
Parameters
value: the custom_type value

◆ store() [18/22]

template<typename T , typename std::enable_if< detail::has_format_method< T >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void serdes::packet::store ( T &&  value)
inline

[[serialize]] stores a type that has a "void format(serdes::packet&)" method into a serial buffer.

Template Parameters
T: A type with a "void format(serdes::packet&)" method (does not need to be from packet_base)
Parameters
value: the object to turn into serial data

◆ store() [19/22]

template<typename T , typename std::enable_if< detail::has_load_and_store< typename detail::remove_cvref_cpp11< T >::type >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE1 void serdes::packet::store ( T &&  value)
inline

[[serialize]] stores a type that has both "T load()" and "void store(T)" methods into a serial buffer.

Template Parameters
T: Any type with "T load()" and "void store(T)" methods
Parameters
value: the object to write serial data to

◆ store() [20/22]

template<typename T , typename std::enable_if< detail::is_formatter< typename detail::remove_cvref_cpp11< T >::type >::value, int * >::type * = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void serdes::packet::store ( T &&  value)
inline

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

Parameters
valuevalue to store

◆ store() [21/22]

template<typename T , typename std::enable_if< detail::has_custom_type_with_bit_support< typename detail::remove_cvref_cpp11< T >::type >::value &&(detail::has_custom_type_override< typename detail::remove_cvref_cpp11< T >::type >::value||(!detail::is_format_modifier< typename detail::remove_cvref_cpp11< T >::type >::value &&!detail::supported_by_bitcpy< typename detail::remove_cvref_cpp11< T >::type >::value &&!std::is_array< typename detail::remove_cvref_cpp11< T >::type >::value &&!detail::has_load_and_store< typename detail::remove_cvref_cpp11< T >::type >::value &&!detail::has_data_and_size< typename detail::remove_cvref_cpp11< T >::type >::value)), int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void serdes::packet::store ( T &&  value,
size_t  bits = custom_type<typename detail::remove_cvref_cpp11<T>::type>::default_bits 
)
inline

[[serialize]] stores a "custom_type" overriden type into a serial buffer, specifically when it supports bitpacking support (accepts bits as an argument and defines a default bit size value for the item).

Template Parameters
T: A type with a custom_type<..> definition for deserialization.
Parameters
value: the custom_type value
bits: the number of bits to unpack the item from

◆ store() [22/22]

template<typename T , typename std::enable_if< detail::has_data_and_size< typename detail::remove_cvref_cpp11< T >::type >::value &&!detail::has_custom_type_override< typename detail::remove_cvref_cpp11< T >::type >::value, int * >::type = nullptr>
CPP_SERDES_LIB_PACKET_API_INLINE2 void serdes::packet::store ( T &&  value,
size_t  bits = detail::default_bitsize<typename detail::has_data_and_size<typename detail::remove_cvref_cpp11<T>::type>::elem_type>::value 
)
inline

[[serialize]] stores any array-like container with "T* data()" and "size_t size()" methods into a serial buffer by treating it like a serdes::array. For example, a std::array, or std::vector.

Template Parameters
T: Any type with both "T* data()" and "size_t size()" methods.
Parameters
valuevalue to store
bitsbits per element of the array

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