26#include <boost/variant.hpp>
34#include <boost/serialization/version.hpp>
35#if BOOST_VERSION / 100000 == 1 && BOOST_VERSION / 100 % 1000 == 74
36#include <boost/serialization/library_version_type.hpp>
39#include <boost/range/algorithm/transform.hpp>
40#include <boost/serialization/serialization.hpp>
41#include <boost/serialization/string.hpp>
42#include <boost/serialization/unordered_map.hpp>
43#include <boost/serialization/variant.hpp>
44#include <boost/serialization/vector.hpp>
50#include <unordered_map>
74using Variant = boost::make_recursive_variant<
78 std::vector<boost::recursive_variant_>,
79 std::unordered_map<int, boost::recursive_variant_>,
80 std::unordered_map<std::string, boost::recursive_variant_>>::type;
82using VariantMap = std::unordered_map<std::string, Variant>;
92template <
typename K,
typename V>
94 std::unordered_map<K, Variant> ret;
95 for (
auto const &it : v) {
96 ret.insert({it.first,
Variant(it.second)});
102 std::vector<Variant> ret;
103 for (
auto const &item : v) {
104 ret.emplace_back(item);
110template <
class T>
struct is_type_visitor : boost::static_visitor<bool> {
111 template <
class U>
constexpr bool operator()(
const U &)
const {
112 return std::is_same_v<T, U>;
125 return boost::apply_visitor(detail::is_type_visitor<T>(), v);
Vector implementation and trait types for boost qvm interoperability.
Type to indicate no value in Variant.
bool is_type(Variant const &v)
Check is a Variant holds a specific type.
std::shared_ptr< ObjectHandle > ObjectRef
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)
boost::make_recursive_variant< None, bool, int, std::size_t, double, std::string, ObjectRef, Utils::Vector3b, Utils::Vector3i, Utils::Vector2d, Utils::Vector3d, Utils::Vector4d, std::vector< int >, std::vector< double >, std::vector< boost::recursive_variant_ >, std::unordered_map< int, boost::recursive_variant_ >, std::unordered_map< std::string, boost::recursive_variant_ > >::type Variant
Possible types for parameters.
bool is_none(Variant const &v)
constexpr const None none
None-"literal".
Utils::Vector< bool, 3 > Vector3b