12 #ifndef SST_CORE_SERIALIZATION_IMPL_SERIALIZE_AGGREGATE_H 13 #define SST_CORE_SERIALIZATION_IMPL_SERIALIZE_AGGREGATE_H 15 #ifndef SST_INCLUDING_SERIALIZE_H 17 "The header file sst/core/serialization/impl/serialize_aggregate.h should not be directly included as it is not part of the stable public API. The file is included in sst/core/serialization/serialize.h" 20 #include "sst/core/serialization/impl/serialize_utility.h" 21 #include "sst/core/serialization/serializer.h" 25 #include <type_traits> 51 template <
typename T,
size_t NFIELDS>
56 #define SERIALIZE_AGGREGATE_IMPL(NFIELDS, ...) \ 57 template <typename T> \ 58 struct serialize_aggregate_impl<T, NFIELDS> : std::true_type \ 60 void operator()(T& t, serializer& ser, ser_opt_t UNUSED(opt)) \ 62 auto& [__VA_ARGS__] = t; \ 63 [&](auto&... e) { (SST_SER(e), ...); }(__VA_ARGS__); \ 67 SERIALIZE_AGGREGATE_IMPL(1, a0);
68 SERIALIZE_AGGREGATE_IMPL(2, a0, a1);
69 SERIALIZE_AGGREGATE_IMPL(3, a0, a1, a2);
70 SERIALIZE_AGGREGATE_IMPL(4, a0, a1, a2, a3);
71 SERIALIZE_AGGREGATE_IMPL(5, a0, a1, a2, a3, a4);
72 SERIALIZE_AGGREGATE_IMPL(6, a0, a1, a2, a3, a4, a5);
73 SERIALIZE_AGGREGATE_IMPL(7, a0, a1, a2, a3, a4, a5, a6);
74 SERIALIZE_AGGREGATE_IMPL(8, a0, a1, a2, a3, a4, a5, a6, a7);
75 SERIALIZE_AGGREGATE_IMPL(9, a0, a1, a2, a3, a4, a5, a6, a7, a8);
76 SERIALIZE_AGGREGATE_IMPL(10, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9);
77 SERIALIZE_AGGREGATE_IMPL(11, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
78 SERIALIZE_AGGREGATE_IMPL(12, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11);
79 SERIALIZE_AGGREGATE_IMPL(13, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12);
80 SERIALIZE_AGGREGATE_IMPL(14, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13);
81 SERIALIZE_AGGREGATE_IMPL(15, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14);
82 SERIALIZE_AGGREGATE_IMPL(16, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15);
83 SERIALIZE_AGGREGATE_IMPL(17, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16);
84 SERIALIZE_AGGREGATE_IMPL(18, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17);
85 SERIALIZE_AGGREGATE_IMPL(19, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18);
86 SERIALIZE_AGGREGATE_IMPL(20, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19);
91 constexpr
bool is_aggregate_serializable_v =
92 std::conjunction_v<std::is_class<T>, std::is_aggregate<T>, std::negation<has_serialize_order<T>>,
96 template <
typename T,
size_t N>
97 constexpr
bool is_aggregate_serializable_v<std::array<T, N>> =
false;
102 template <
typename T>
106 SST_FRIEND_SERIALIZE();
111 #endif // SST_CORE_SERIALIZATION_IMPL_SERIALIZE_AGGREGATE_H Base serialize class.
Definition: serialize.h:113
Definition: serialize_aggregate.h:52