a serialization/deserialization helper class, with load, store, and stream operators
More...
|
|
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 packet & | operator>> (T &&x) |
| | [[deserialize]] loads serial data into the passed value (same as load) More...
|
| |
| template<typename T > |
| CPP_SERDES_LIB_PACKET_API_INLINE1 packet & | operator<< (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 packet & | operator+ (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...
|
| |