29#include <boost/serialization/access.hpp>
30#include <boost/serialization/serialization.hpp>
31#include <boost/serialization/string.hpp>
32#include <boost/serialization/vector.hpp>
39#include <unordered_map>
86 using BaseClass::BaseClass;
89 template <
class T>
using has_type = std::disjunction<std::is_same<T, Ts>...>;
94 template <
typename Archive>
95 void serialize(
Archive &
ar,
unsigned const ) {
114template <
typename ObjectType>
143template <
typename K,
typename V>
145 return std::unordered_map<K, Variant>{v.begin(), v.end()};
149 return std::vector<Variant>{v.begin(), v.end()};
160 return std::holds_alternative<T>(v);
Vector implementation and trait types for boost qvm interoperability.
Type to indicate no value in Variant.
Base class for interface handles.
std::variant< Ts..., std::vector< recursive_variant< Ts... > >, std::unordered_map< int, recursive_variant< Ts... > >, std::unordered_map< std::string, recursive_variant< Ts... > > > recursive_variant_add_containers
Helper class to inject STL containers in a recursive variant typelist.
constexpr bool is_none(Variant const &v)
constexpr bool is_type(Variant const &v)
Check is a Variant holds a specific type.
std::shared_ptr< ObjectHandle > ObjectRef
T get_value(Variant const &v)
Extract value of specific type T from a Variant.
std::unordered_map< std::string, Variant > VariantMap
auto make_unordered_map_of_variants(std::unordered_map< K, V > const &v)
Variant make_variant(const T &x)
Make a Variant from argument.
auto make_vector_of_variants(std::vector< T > const &v)
make_recursive_variant< ObjectRef > Variant
Possible types for parameters.
constexpr const None none
None-"literal".
Utils::Vector< bool, 3 > Vector3b
Recursive variant implementation.
recursive_variant_add_containers< Ts... > BaseClass
friend class boost::serialization::access
std::disjunction< std::is_same< T, Ts >... > has_type
Is a given type part of this variant's type list.