Go to the documentation of this file.
6 #include "../mip_field.h"
7 #include "../mip_packet.h"
8 #include "../mip_types.h"
20 #include <type_traits>
157 Serializer(
const uint8_t* buffer,
size_t size,
size_t offset=0) {
C::mip_serializer_init_extraction(
this,
const_cast<uint8_t*
>(buffer), size); this->_offset = offset; }
166 operator const void*()
const {
return isOk() ? this :
nullptr; }
167 bool operator!()
const {
return !isOk(); }
172 inline void insert(Serializer& serializer,
bool value) {
return C::insert_bool (&serializer, value); }
173 inline void insert(Serializer& serializer,
char value) {
return C::insert_char (&serializer, value); }
174 inline void insert(Serializer& serializer, uint8_t value) {
return C::insert_u8 (&serializer, value); }
175 inline void insert(Serializer& serializer, uint16_t value) {
return C::insert_u16 (&serializer, value); }
176 inline void insert(Serializer& serializer, uint32_t value) {
return C::insert_u32 (&serializer, value); }
177 inline void insert(Serializer& serializer, uint64_t value) {
return C::insert_u64 (&serializer, value); }
178 inline void insert(Serializer& serializer, int8_t value) {
return C::insert_s8 (&serializer, value); }
179 inline void insert(Serializer& serializer, int16_t value) {
return C::insert_s16 (&serializer, value); }
180 inline void insert(Serializer& serializer, int32_t value) {
return C::insert_s32 (&serializer, value); }
181 inline void insert(Serializer& serializer, int64_t value) {
return C::insert_s64 (&serializer, value); }
182 inline void insert(Serializer& serializer,
float value) {
return C::insert_float (&serializer, value); }
193 template<
typename Enum>
194 typename std::enable_if< std::is_enum<Enum>::value,
void>::type
195 insert(Serializer& serializer, Enum value) {
return insert(serializer,
static_cast< typename std::underlying_type<Enum>::type
>(value) ); }
211 bool insert(
const T& value, uint8_t* buffer,
size_t bufferSize,
size_t offset=0)
213 Serializer serializer(buffer, bufferSize, offset);
214 insert(serializer, value);
218 inline void extract(Serializer& serializer,
bool& value) {
return C::extract_bool (&serializer, &value); }
219 inline void extract(Serializer& serializer,
char& value) {
return C::extract_char (&serializer, &value); }
220 inline void extract(Serializer& serializer, uint8_t& value) {
return C::extract_u8 (&serializer, &value); }
221 inline void extract(Serializer& serializer, uint16_t& value) {
return C::extract_u16 (&serializer, &value); }
222 inline void extract(Serializer& serializer, uint32_t& value) {
return C::extract_u32 (&serializer, &value); }
223 inline void extract(Serializer& serializer, uint64_t& value) {
return C::extract_u64 (&serializer, &value); }
224 inline void extract(Serializer& serializer, int8_t& value) {
return C::extract_s8 (&serializer, &value); }
225 inline void extract(Serializer& serializer, int16_t& value) {
return C::extract_s16 (&serializer, &value); }
226 inline void extract(Serializer& serializer, int32_t& value) {
return C::extract_s32 (&serializer, &value); }
227 inline void extract(Serializer& serializer, int64_t& value) {
return C::extract_s64 (&serializer, &value); }
239 template<
typename Enum>
240 typename std::enable_if< std::is_enum<Enum>::value,
void>::type
241 extract(Serializer& serializer, Enum& value) {
242 typename std::underlying_type<Enum>::type tmp;
244 value =
static_cast<Enum
>(tmp);
268 bool extract(T& value_out,
const uint8_t* buffer,
size_t bufferSize,
size_t offset=0,
bool exact_size=
false)
270 Serializer serializer(buffer, bufferSize, offset);
271 extract(serializer, value_out);
272 return exact_size ? serializer.isComplete() : serializer.isOk();
280 #endif // __cplusplus
void insert_bool(mip_serializer *serializer, bool value)
size_t mip_serializer_capacity(const mip_serializer *serializer)
Determines the total length the buffer.
void mip_serializer_init_from_field(mip_serializer *serializer, const mip_field *field)
Initialize a serialization struct from a MIP field payload.
void extract_u16(mip_serializer *serializer, uint16_t *value)
void extract_s32(mip_serializer *serializer, int32_t *value)
void extract(Serializer &serializer, NmeaMessage &self)
size_t mip_serializer_length(const mip_serializer *serializer)
Determines the length of the data in the buffer.
void insert_double(mip_serializer *serializer, double value)
void extract_float(mip_serializer *serializer, float *value)
void extract_double(mip_serializer *serializer, double *value)
void insert_s16(mip_serializer *serializer, int16_t value)
void mip_serializer_init_extraction(mip_serializer *serializer, const uint8_t *buffer, size_t buffer_size)
Initialize a serialization struct for extraction from a buffer.
Structure used for serialization.
void insert_s8(mip_serializer *serializer, int8_t value)
void insert(Serializer &serializer, const NmeaMessage &self)
void insert_u8(mip_serializer *serializer, uint8_t value)
A structure representing a MIP field.
void insert_char(mip_serializer *serializer, char value)
bool mip_serializer_is_complete(const mip_serializer *serializer)
Determines if the number of remaining bytes is 0.
void extract_count(mip_serializer *serializer, uint8_t *count_out, uint8_t max_count)
Similar to extract_u8 but allows a maximum value to be specified.
uint8_t * _buffer
Pointer to data for serialization.
void mip_serializer_init_insertion(mip_serializer *serializer, uint8_t *buffer, size_t buffer_size)
Initialize a serialization struct for insertion into a buffer.
void extract_u64(mip_serializer *serializer, uint64_t *value)
void mip_serializer_init_new_field(mip_serializer *serializer, mip_packet *packet, uint8_t field_descriptor)
Initializer a serialization struct for creation of a new field at the end of the packet.
void extract_s8(mip_serializer *serializer, int8_t *value)
void insert_float(mip_serializer *serializer, float value)
void insert_s32(mip_serializer *serializer, int32_t value)
struct mip_packet mip_packet
Structure representing a MIP Packet.
void extract_char(mip_serializer *serializer, char *value)
void insert_u32(mip_serializer *serializer, uint32_t value)
void extract_u8(mip_serializer *serializer, uint8_t *value)
void extract_s64(mip_serializer *serializer, int64_t *value)
void insert_u16(mip_serializer *serializer, uint16_t value)
void mip_serializer_finish_new_field(const mip_serializer *serializer, mip_packet *packet)
Call this after a new field allocated by mip_serializer_init_new_field has been written.
struct mip_serializer mip_serializer
Structure used for serialization.
void extract_bool(mip_serializer *serializer, bool *value)
size_t _buffer_size
Size of the buffer.
int mip_serializer_remaining(const mip_serializer *serializer)
Determines the difference between the length and buffer size.
bool mip_serializer_is_ok(const mip_serializer *serializer)
Determines if the data read/written is less than the buffer size.
void extract_u32(mip_serializer *serializer, uint32_t *value)
void extract_s16(mip_serializer *serializer, int16_t *value)
size_t _offset
Current offset into the buffer (can exceed buffer_size!).
Structure representing a MIP Packet.
TF2SIMD_FORCE_INLINE tf2Scalar length(const Quaternion &q)
void insert_s64(mip_serializer *serializer, int64_t value)
void insert_u64(mip_serializer *serializer, uint64_t value)