14 template <
typename MODBUS_REGISTER_DESCRIPTOR,
typename SRC_TYPE>
15 void SplitSrcAcrossOutputs (
const SRC_TYPE& s,
typename MODBUS_REGISTER_DESCRIPTOR::NameType baseRegister,
16 Containers::Mapping<typename MODBUS_REGISTER_DESCRIPTOR::NameType, typename MODBUS_REGISTER_DESCRIPTOR::ValueType>* update)
18 using VT =
typename MODBUS_REGISTER_DESCRIPTOR::ValueType;
19 constexpr size_t kNElts_ =
sizeof (SRC_TYPE) /
sizeof (VT);
20 static_assert (kNElts_ *
sizeof (VT) ==
sizeof (SRC_TYPE),
"");
22 const VT* arr =
reinterpret_cast<const VT*
> (&s);
23 for (
size_t i = 0; i < kNElts_; ++i) {
25 update->Add (baseRegister + i, arr[(
Common::GetEndianness () == Common::Endian::eLittle) ? (kNElts_ - i - 1) : i]);
#define RequireNotNull(p)
constexpr Endian GetEndianness()
returns native (std::endian::native) Endianness flag. Can be complicated (mixed, etc)....