1#ifndef DAQ_MESSAGE_FACTORY_HPP
2#define DAQ_MESSAGE_FACTORY_HPP
23template <
typename... Fields>
35 template <std::
size_t Index>
37 return std::get<Index>(
fields);
40 template <std::
size_t Index>
42 return std::get<Index>(
fields);
45 template <std::
size_t Index,
typename ValueType>
47 std::get<Index>(
fields) = std::forward<ValueType>(
value);
51 return std::tuple_size<std::tuple<Fields...>>
::value;
58 std::size_t offset = 0;
60 [&](
const auto&... field_vals) {
68 std::size_t offset = 0;
70 [&](
auto&... field_vals) {
71 ((std::memcpy(&field_vals, buffer + offset,
sizeof(field_vals)),
72 offset +=
sizeof(field_vals)),
79 static constexpr std::size_t
nbytes() {
87 void serialize_field(uint8_t* buffer, std::size_t& offset,
const T& field)
const {
92 [&](
const auto&... nested_fields) {
99 for (
const auto& item : field) {
105 std::memcpy(buffer + offset, &field,
sizeof(field));
106 offset +=
sizeof(field);
111 template <
typename T>
114 template <
typename T, std::
size_t N>
117 template <
typename T>
121 template <
typename T>
124 template <
typename... Ts>
127 template <
typename T>
131 template <
typename T>
133 static constexpr std::size_t
value =
sizeof(T);
136 template <
typename... Ts>
149template <
typename... Ts>
157 static constexpr std::size_t
value =
sizeof(T);
Central message header for all communication messages.
static constexpr std::size_t value
static constexpr std::size_t value
static constexpr std::size_t value
static constexpr std::size_t value
CommsMessage(Fields... args)
static constexpr bool is_comms_message_v
const auto & getField() const
static constexpr bool is_std_array_v
void deserialize(const uint8_t *buffer)
void serialize(uint8_t *buffer) const
std::tuple< Fields... > fields
void serialize_field(uint8_t *buffer, std::size_t &offset, const T &field) const
constexpr std::size_t get_size() const
void setField(ValueType &&value)
static constexpr std::size_t nbytes()