37 std::variant<Types...>& obj;
42 ObjectMapVariantIndex(std::variant<Types...>& obj,
ObjectMap* parent) :
49 void set_impl(
const std::string& value)
override
53 if ( index == old )
return;
57 if ( index == std::variant_npos || index == -
size_t { 1 } ) {
63 if ( index >=
sizeof...(Types) ) {
64 printf(
"Index out of range\n");
72 set_index<std::index_sequence_for<Types...>>::array.at(index)(obj);
75 std::visit([&](
auto& x) { parent->
addVariable(
"value", ObjectMapSerialization(x)); }, obj);
79 void operator()(std::variant<Types...>& obj,
serializer& ser, ser_opt_t UNUSED(options))
81 size_t index = obj.index();
83 switch ( ser.mode() ) {
85 ser.mapper().map_hierarchy_start(ser.getMapName(),
new ObjectMapContainer<std::variant<Types...>>(&obj));
86 ser.mapper().map_object(
"index",
new ObjectMapVariantIndex(obj, ser.mapper().get_top()));
87 if ( index != std::variant_npos )
88 std::visit([&](
auto& x) { ser.mapper().map_object(
"value", ObjectMapSerialization(x)); }, obj);
89 ser.mapper().map_hierarchy_end();
92 case serializer::SIZER:
96 case serializer::PACK:
100 case serializer::UNPACK:
105 if ( index != std::variant_npos ) set_index<std::index_sequence_for<Types...>>::array.at(index)(obj);
113 if ( index != std::variant_npos ) std::visit([&](
auto& x) { SST_SER(x); }, obj);
142 template <
size_t INDEX>
143 static void set_index_func(std::variant<Types...>& obj)
145 obj.template emplace<INDEX>();
148 template <
size_t... INDEX>
149 struct set_index<std::index_sequence<INDEX...>>
151 static constexpr std::array<void (*)(std::variant<Types...>& obj),
sizeof...(INDEX)> array = {
152 set_index_func<INDEX>...
156 SST_FRIEND_SERIALIZE();
virtual void addVariable(const std::string &UNUSED(name), ObjectMap *UNUSED(obj))
Adds a variable to this ObjectMap.
Definition objectMap.h:403