MIP_SDK
v3.0.0-425-g6df21bd
MicroStrain Communications Library for embedded systems
|
(De)serialization in C++. More...
Classes | |
class | microstrain::SerializerBase |
Represents a view of a buffer of bytes of known capacity. More... | |
class | microstrain::Serializer< E > |
Serializes or deserializes data to/from a byte buffer. More... | |
Typedefs | |
using | microstrain::BigEndianSerializer = Serializer< serialization::Endian::big > |
using | microstrain::LittleEndianSerializer = Serializer< serialization::Endian::little > |
Functions | |
template<serialization::Endian E, class T > | |
std::enable_if< std::is_arithmetic< T >::value, size_t >::type | microstrain::insert (Serializer< E > &buffer, T value) |
Inserts a numeric value to a Serializer. More... | |
template<serialization::Endian E, class T > | |
std::enable_if< std::is_arithmetic< T >::value, size_t >::type | microstrain::extract (Serializer< E > &buffer, T &value) |
Reads a numeric value from a Serializer. More... | |
template<serialization::Endian E, class T , decltype &::insert = nullptr> | |
std::enable_if< std::is_class< T >::value, size_t >::type | microstrain::insert (microstrain::Serializer< E > &serializer, const T &object) |
Writes a class object to a Serializer. This overload is available to any class which defines a method insert . It shall take a Serializer reference as the sole parameter. More... | |
template<serialization::Endian E, class T , decltype &::extract = nullptr> | |
std::enable_if< std::is_class< T >::value, size_t >::type | microstrain::extract (microstrain::Serializer< E > &serializer, T &object) |
Reads a class object from a Serializer. This overload is available to any class which defines a method extract . It shall take a Serializer reference as the sole parameter. More... | |
template<serialization::Endian E, class T > | |
size_t | microstrain::insert (Serializer< E > &serializer, const T *values, size_t count) |
Writes an array to a Serializer. More... | |
template<serialization::Endian E, class T > | |
size_t | microstrain::extract (Serializer< E > &serializer, T *values, size_t count) |
Reads an array from a Serializer. More... | |
template<serialization::Endian E, class T > | |
size_t | microstrain::insert (Serializer< E > &serializer, microstrain::Span< const T > values) |
Writes an array to a Serializer via a Span. More... | |
template<serialization::Endian E, class T > | |
size_t | microstrain::extract (Serializer< E > &serializer, microstrain::Span< const T > values) |
Reads an array from a Serializer via a Span. More... | |
template<serialization::Endian E, class T , size_t N> | |
size_t | microstrain::insert (Serializer< E > &serializer, const T(&values)[N]) |
Writes a fixed-size array to a Serializer. More... | |
template<serialization::Endian E, class T , size_t N> | |
size_t | microstrain::extract (Serializer< E > &serializer, T(&values)[N]) |
Reads a fixed-size array from a Serializer. More... | |
template<serialization::Endian E, class T , size_t N> | |
size_t | microstrain::insert (Serializer< E > &serializer, const std::array< T, N > &values) |
Writes a std::array to a Serializer. More... | |
template<serialization::Endian E, class T , size_t N> | |
size_t | microstrain::extract (Serializer< E > &serializer, const std::array< T, N > &values) |
Reads a std::array from a Serializer. More... | |
template<serialization::Endian E, typename T0 , typename T1 , typename... Ts> | |
size_t | microstrain::insert (Serializer< E > &serializer, const T0 &value0, const T1 &value1, Ts... values) |
Writes multiple values to a Serializer. More... | |
template<serialization::Endian E, typename T0 , typename T1 , typename... Ts> | |
size_t | microstrain::extract (Serializer< E > &serializer, T0 &value0, T1 &value1, Ts &... values) |
Reads multiple values from a Serializer. More... | |
template<serialization::Endian E, class T > | |
bool | microstrain::insert (const T &value, uint8_t *buffer, size_t buffer_length, size_t offset=0, bool exact_size=false) |
Serializes a value to a raw byte buffer. More... | |
template<serialization::Endian E, class T > | |
bool | microstrain::extract (T &value, const uint8_t *buffer, size_t buffer_length, size_t offset=0, bool exact_size=false) |
Deserializes a value from a raw byte buffer. More... | |
template<serialization::Endian E, class T > | |
bool | microstrain::insert (T value, microstrain::Span< uint8_t > buffer, size_t offset=0, bool exact_size=false) |
Serializes a value to a raw byte buffer (span version). More... | |
template<serialization::Endian E, class T > | |
bool | microstrain::extract (T &value, microstrain::Span< const uint8_t > buffer, size_t offset=0, bool exact_size=false) |
Deserializes a value from a raw byte buffer (span version). More... | |
template<typename... Ts> | |
bool | microstrain::Serializer< E >::insert (const Ts &... values) |
Serializes one or more values. More... | |
template<typename... Ts> | |
bool | microstrain::Serializer< E >::extract (Ts &... values) |
Deserializes one or more values. More... | |
template<class T , class S > | |
bool | microstrain::Serializer< E >::extract_count (T &count, S max_count) |
Deserializes an integer with maximum permissible value. More... | |
(De)serialization in C++.
using microstrain::BigEndianSerializer = typedef Serializer<serialization::Endian::big> |
using microstrain::LittleEndianSerializer = typedef Serializer<serialization::Endian::little> |
std::enable_if<std::is_class<T>::value , size_t>::type microstrain::extract | ( | microstrain::Serializer< E > & | serializer, |
T & | object | ||
) |
Reads a class object from a Serializer. This overload is available to any class which defines a method extract
. It shall take a Serializer reference as the sole parameter.
Example:
E | Endianness of buffer. Automatically deduced from the serializer parameter. |
T | Type of the class. Automatically deduced from the object parameter. |
serializer | Serializer object pointing to the source buffer. |
object | The class to read from the buffer. |
std::enable_if<std::is_arithmetic<T>::value, size_t>::type microstrain::extract | ( | Serializer< E > & | buffer, |
T & | value | ||
) |
Reads a numeric value from a Serializer.
E | Endianness of buffer. Automatically deduced from the serializer parameter. |
T | Type of the value to read. Automatically deduced from the value parameter. |
buffer | Serializer object pointing to the source buffer. | |
[out] | value | The read value is stored in this variable. Can be a reference to bool, int, uint32_t, float, etc. |
size_t microstrain::extract | ( | Serializer< E > & | serializer, |
const std::array< T, N > & | values | ||
) |
Reads a std::array from a Serializer.
E | Endianness of buffer. Automatically deduced from the serializer parameter. |
T | Type of array elements. Automatically deduced from the values parameter. |
serializer | Serializer object pointing to the source buffer. |
values | std::array of values |
size_t microstrain::extract | ( | Serializer< E > & | serializer, |
microstrain::Span< const T > | values | ||
) |
Reads an array from a Serializer via a Span.
E | Endianness of buffer. Automatically deduced from the serializer parameter. |
T | Type of array elements. Automatically deduced from the values parameter. |
serializer | Serializer object pointing to the source buffer. |
values | Span containing pointer and count. |
size_t microstrain::extract | ( | Serializer< E > & | serializer, |
T * | values, | ||
size_t | count | ||
) |
Reads an array from a Serializer.
E | Endianness of buffer. Automatically deduced from the serializer parameter. |
T | Type of array elements. Automatically deduced from the values parameter. |
serializer | Serializer object pointing to the source buffer. |
values | Pointer to the first value in the array. |
count | Number of elements in the array to read. |
size_t microstrain::extract | ( | Serializer< E > & | serializer, |
T(&) | values[N] | ||
) |
Reads a fixed-size array from a Serializer.
E | Endianness of buffer. Automatically deduced from the serializer parameter. |
T | Type of array elements. Automatically deduced from the values parameter. |
serializer | Serializer object pointing to the source buffer. |
values | C-style array of values |
size_t microstrain::extract | ( | Serializer< E > & | serializer, |
T0 & | value0, | ||
T1 & | value1, | ||
Ts &... | values | ||
) |
Reads multiple values from a Serializer.
This function is equivalent to calling extract on each parameter in sequence.
This function can make use of C++17 fold expressions to improve performance by combining the buffer bounds checks when all types are of known size (i.e. numeric types).
E | Endianness of buffer. Automatically deduced from the serializer parameter. |
Ts | Types of values. Automatically deduced from the values parameters. |
serializer | Serializer object pointing to the destination buffer. |
values | One or more parameters to be read. |
bool microstrain::extract | ( | T & | value, |
const uint8_t * | buffer, | ||
size_t | buffer_length, | ||
size_t | offset = 0 , |
||
bool | exact_size = false |
||
) |
Deserializes a value from a raw byte buffer.
Use this overload to read a single value without needing to manually construct a Serializer object.
Example:
E | Endianness of buffer. Must be manually specified. |
T | Type of value. Automatically deduced from the value parameter. |
value | Parameter to deserialize. This can be any serializable type. |
buffer | Pointer to first element of the byte buffer. |
buffer_length | Length/size of buffer. |
offset | Starting offset (default 0). |
exact_size | Returns true only if exactly buffer_length-offset bytes are read. Default false. |
bool microstrain::extract | ( | T & | value, |
microstrain::Span< const uint8_t > | buffer, | ||
size_t | offset = 0 , |
||
bool | exact_size = false |
||
) |
Deserializes a value from a raw byte buffer (span version).
Use this overload to read a single value without needing to manually construct a Serializer object.
E | Endianness of buffer. Must be manually specified. |
T | Type of value. Automatically deduced from the value parameter. |
value | Parameter to deserialize. This can be any serializable type. |
buffer | Source buffer span. |
offset | Starting offset (default 0). |
exact_size | Returns true only if exactly buffer.size()-offset bytes are read. Default false. |
bool microstrain::Serializer< E >::extract | ( | Ts &... | values | ) |
Deserializes one or more values.
This function defers to the non-member function microstrain::extract. By doing so, it allows the user to provide custom overloads for their own types. Any type supported by the non-member functions may be used here.
Ts | Types of values to deserialize. |
[out] | values | One or more parameters to deserialize. |
bool microstrain::Serializer< E >::extract_count | ( | T & | count, |
S | max_count | ||
) |
Deserializes an integer with maximum permissible value.
This function is intended to be used with protocols which have embedded length fields. This function returns false and invalidates the serializer if the count is too large.
T | Type of value to read. Expected to be integer-like and must support bool operator<=(S) . |
S | Type of the maximum value. Usually the same integral type as T, but the only requirement is that it can be compared with T. |
[out] | count | Value read from the buffer. Set to 0 on failure. |
max_count | Maximum permissible value for count (inclusive). |
bool microstrain::insert | ( | const T & | value, |
uint8_t * | buffer, | ||
size_t | buffer_length, | ||
size_t | offset = 0 , |
||
bool | exact_size = false |
||
) |
Serializes a value to a raw byte buffer.
Use this overload to write a single value without needing to manually construct a Serializer object.
Example:
E | Endianness of buffer. Must be manually specified. |
T | Type of value. Automatically deduced from the value parameter. |
value | Parameter to serialize. This can be any serializable type. |
buffer | Pointer to first element of the byte buffer. |
buffer_length | Length/size of buffer. |
offset | Starting offset. Default 0. |
exact_size | Returns true only if exactly buffer_length plus offset bytes are written. Default false. |
bool microstrain::Serializer< E >::insert | ( | const Ts &... | values | ) |
Serializes one or more values.
This function defers to the non-member function microstrain::insert. By doing so, it allows the user to provide custom overloads for their own types. Any type supported by the non-member functions may be used here.
Ts | Types of values to serialize. |
values | One or more parameters to serialize. |
std::enable_if<std::is_class<T>::value , size_t>::type microstrain::insert | ( | microstrain::Serializer< E > & | serializer, |
const T & | object | ||
) |
Writes a class object to a Serializer. This overload is available to any class which defines a method insert
. It shall take a Serializer reference as the sole parameter.
Example:
E | Endianness of buffer. Automatically deduced from the serializer parameter. |
T | Type of the class. Automatically deduced from the object parameter. |
serializer | Serializer object pointing to the destination buffer. |
object | The class to write to the buffer. |
std::enable_if<std::is_arithmetic<T>::value, size_t>::type microstrain::insert | ( | Serializer< E > & | buffer, |
T | value | ||
) |
Inserts a numeric value to a Serializer.
E | Endianness of buffer. Automatically deduced from the serializer parameter. |
T | Type of the value to write. Automatically deduced from the value parameter. |
buffer | Serializer object pointing to the destination buffer. |
value | A number to write to the buffer. Can be bool, int, uint32_t, float, etc. |
size_t microstrain::insert | ( | Serializer< E > & | serializer, |
const std::array< T, N > & | values | ||
) |
Writes a std::array to a Serializer.
E | Endianness of buffer. Automatically deduced from the serializer parameter. |
T | Type of array elements. Automatically deduced from the values parameter. |
serializer | Serializer object pointing to the destination buffer. |
values | std::array of values |
size_t microstrain::insert | ( | Serializer< E > & | serializer, |
const T * | values, | ||
size_t | count | ||
) |
Writes an array to a Serializer.
E | Endianness of buffer. Automatically deduced from the serializer parameter. |
T | Type of array elements. Automatically deduced from the values parameter. |
serializer | Serializer object pointing to the destination buffer. |
values | Pointer to the first value in the array. |
count | Number of elements in the array to write. |
size_t microstrain::insert | ( | Serializer< E > & | serializer, |
const T(&) | values[N] | ||
) |
Writes a fixed-size array to a Serializer.
E | Endianness of buffer. Automatically deduced from the serializer parameter. |
T | Type of array elements. Automatically deduced from the values parameter. |
serializer | Serializer object pointing to the destination buffer. |
values | C-style array of values |
size_t microstrain::insert | ( | Serializer< E > & | serializer, |
const T0 & | value0, | ||
const T1 & | value1, | ||
Ts... | values | ||
) |
Writes multiple values to a Serializer.
This function is equivalent to calling insert on each parameter in sequence.
This function can make use of C++17 fold expressions to improve performance by combining the buffer bounds checks when all types are of known size (i.e. numeric types).
E | Endianness of buffer. Automatically deduced from the serializer parameter. |
Ts | Types of values. Automatically deduced from the values parameters. |
serializer | Serializer object pointing to the destination buffer. |
values | One or more parameters to be written. |
size_t microstrain::insert | ( | Serializer< E > & | serializer, |
microstrain::Span< const T > | values | ||
) |
Writes an array to a Serializer via a Span.
E | Endianness of buffer. Automatically deduced from the serializer parameter. |
T | Type of array elements. Automatically deduced from the values parameter. |
serializer | Serializer object pointing to the destination buffer. |
values | Span containing pointer and count. |
bool microstrain::insert | ( | T | value, |
microstrain::Span< uint8_t > | buffer, | ||
size_t | offset = 0 , |
||
bool | exact_size = false |
||
) |
Serializes a value to a raw byte buffer (span version).
Use this overload to write a single value without needing to manually construct a Serializer object.
E | Endianness of buffer. Must be manually specified. |
T | Type of value. Automatically deduced from the value parameter. |
value | Parameter to serialize. This can be any serializable type. |
buffer | Source buffer span. |
offset | Starting offset. Default 0. |
exact_size | Returns true only if exactly buffer.size()-offset bytes are written. Default false. |