This example demonstrates how to add serialization support to new and existing types
#include "../include/bitprint.h"
#include "../include/serdes.h"
#include <array>
#include <mutex>
#include <stdio.h>
#include <string>
template <typename T>
{
public:
template <typename... T2>
T load() const
{
std::lock_guard<std::mutex> lk(m);
printf("mutex_safe_wrapper::load()\n");
return value;
}
template <typename T2>
void store(T2 &&val)
{
std::lock_guard<std::mutex> lk(m);
printf("mutex_safe_wrapper::store(val)\n");
value = std::forward<T2>(val);
}
private:
T value{};
mutable std::mutex m{};
};
uint8_t bits_per_coordinate{};
serial_data +
bits_per_coordinate +
}
};
uint16_t num_coordinates{};
std::array<coordinates_type, 100u> coordinates{};
uint16_t crc16{};
serial_data +
num_coordinates +
printf("Got an invalid crc! Got 0x%04X, calculated 0x%04X\n", crc16, calculated);
}
};
template <>
template <typename T>
if constexpr (std::is_const_v<std::remove_reference_t<T>>)
else {
item.reserve(2048u);
}
}
else
}
};
int main()
{
std::array<uint8_t, 100> serial_data{};
printf("stored '%s' into serial data\n", serial_data.data());
std::string some_string = "this will be overwritten";
printf("loaded '%s' into a std::string\n", some_string.c_str());
uint8_t uint8_data[100] = {
0x00, 0x03, 0x08, 0x11, 0x22, 0x33, 0x08, 0xAA, 0xBB, 0xCC, 0x08, 0xEE, 0xFF, 0xEF, 0x57, 0x19};
auto stat = complex_obj.
load(uint8_data);
printf(
"loaded uint8_t[] %zu bits total with %s\n", stat.bits,
serdes::status2str(stat.status));
stat = complex_obj.
store(uint8_data);
uint16_t uint16_data[100] = {0x0003, 0x0811, 0x2233, 0x08AA, 0xBBCC, 0x08EE, 0xFFEF, 0x5719};
stat = complex_obj.
load(uint16_data);
printf(
"loaded uint16_t[] %zu bits total with %s\n", stat.bits,
serdes::status2str(stat.status));
stat = complex_obj.
store(uint16_data);
uint32_t uint32_data[100] = {0x00030811, 0x223308AA, 0xBBCC08EE, 0xFFEF5719};
stat = complex_obj.
load(uint32_data);
printf(
"loaded uint32_t[] %zu bits total with %s\n", stat.bits,
serdes::status2str(stat.status));
stat = complex_obj.
store(uint32_data);
}