diff --git a/common/include/serial.h b/common/include/serial.h index 21145a50e..2d1a5d344 100644 --- a/common/include/serial.h +++ b/common/include/serial.h @@ -466,6 +466,13 @@ static inline void process_integer(Accessor &buffer, A1 &a1) advance(buffer, sizeof(u.u)); } +template +static inline typename tt::enable_if::value, void>::type process_array(Accessor &accessor, A &a) +{ + std::copy_n(static_cast(accessor), a.size(), &a[0]); + advance(accessor, a.size()); +} + } namespace writer { @@ -487,6 +494,13 @@ static inline void process_integer(Accessor &buffer, const A1 &a1) advance(buffer, sizeof(u.u)); } +template +static inline typename tt::enable_if::value, void>::type process_array(Accessor &accessor, const A &a) +{ + std::copy_n(&a[0], a.size(), static_cast(accessor)); + advance(accessor, a.size()); +} + } template @@ -515,11 +529,17 @@ static inline typename tt::enable_if::value, void>::type pr postprocess_udt(accessor, a1); } +template +static typename tt::enable_if::value), void>::type process_array(Accessor &accessor, A &a) +{ + range_for (auto &i, a) + process_buffer(accessor, i); +} + template typename tt::enable_if::value, void>::type process_buffer(Accessor &accessor, A1 &a1) { - range_for (auto &i, a1) - process_buffer(accessor, i); + process_array(accessor, a1); } template