1 #ifndef REFLECTIVE_RAPIDJSON_TRAITS 2 #define REFLECTIVE_RAPIDJSON_TRAITS 4 #include <c++utilities/misc/traits.h> 9 #include <unordered_map> 10 #include <unordered_set> 28 #define REFLECTIVE_RAPIDJSON_TREAT_AS_MAP_OR_HASH(T) \ 29 template <> struct TreatAsMapOrHash<T> : public Traits::Bool<true> { \ 31 #define REFLECTIVE_RAPIDJSON_TREAT_AS_MULTI_MAP_OR_HASH(T) \ 32 template <> struct TreatAsMultiMapOrHash<T> : public Traits::Bool<true> { \ 34 #define REFLECTIVE_RAPIDJSON_TREAT_AS_SET(T) \ 35 template <> struct TreatAsSet<T> : public Traits::Bool<true> { \ 37 #define REFLECTIVE_RAPIDJSON_TREAT_AS_MULTI_SET(T) \ 38 template <> struct TreatAsMultiSet<T> : public Traits::Bool<true> { \ 42 template <
typename Type>
44 = Traits::Any<Traits::IsSpecializationOf<Type, std::map>, Traits::IsSpecializationOf<Type, std::unordered_map>,
TreatAsMapOrHash<Type>>;
45 template <
typename Type>
46 using IsMultiMapOrHash = Traits::Any<Traits::IsSpecializationOf<Type, std::multimap>, Traits::IsSpecializationOf<Type, std::unordered_multimap>,
48 template <
typename Type>
49 using IsSet = Traits::Any<Traits::IsSpecializationOf<Type, std::set>, Traits::IsSpecializationOf<Type, std::unordered_set>,
TreatAsSet<Type>>;
50 template <
typename Type>
52 = Traits::Any<Traits::IsSpecializationOf<Type, std::multiset>, Traits::IsSpecializationOf<Type, std::unordered_multiset>,
TreatAsMultiSet<Type>>;
53 template <
typename Type>
54 using IsArrayOrSet = Traits::Any<Traits::All<Traits::IsIteratable<Type>, Traits::Not<Traits::IsSpecializationOf<Type, std::basic_string>>,
55 Traits::Not<IsMapOrHash<Type>>, Traits::Not<IsMultiMapOrHash<Type>>>,
57 template <
typename Type>
58 using IsArray = Traits::All<Traits::IsIteratable<Type>, Traits::Not<Traits::IsSpecializationOf<Type, std::basic_string>>,
59 Traits::Not<IsMapOrHash<Type>>, Traits::Not<IsSet<Type>>, Traits::Not<IsMultiSet<Type>>>;
60 template <
typename Type>
61 using IsIteratableExceptString = Traits::All<Traits::IsIteratable<Type>, Traits::Not<Traits::IsSpecializationOf<Type, std::basic_string>>>;
65 #endif // REFLECTIVE_RAPIDJSON_TRAITS
Traits::Any< Traits::IsSpecializationOf< Type, std::map >, Traits::IsSpecializationOf< Type, std::unordered_map >, TreatAsMapOrHash< Type > > IsMapOrHash
Traits::Any< Traits::All< Traits::IsIteratable< Type >, Traits::Not< Traits::IsSpecializationOf< Type, std::basic_string > >, Traits::Not< IsMapOrHash< Type > >, Traits::Not< IsMultiMapOrHash< Type > >>, TreatAsSet< Type >, TreatAsMultiSet< Type > > IsArrayOrSet
The TreatAsSet class allows treating custom classes as std::set or std::unordered_set.
Traits::Any< Traits::IsSpecializationOf< Type, std::set >, Traits::IsSpecializationOf< Type, std::unordered_set >, TreatAsSet< Type > > IsSet
Traits::Any< Traits::IsSpecializationOf< Type, std::multimap >, Traits::IsSpecializationOf< Type, std::unordered_multimap >, TreatAsMultiMapOrHash< Type > > IsMultiMapOrHash
The TreatAsMultiMapOrHash class allows treating custom classes as std::multimap or std::unordered_mul...
The TreatAsMapOrHash class allows treating custom classes as std::map or std::unordered_map.
The TreatAsMultiSet class allows treating custom classes as std::multiset or std::unordered_multiset.
Traits::Any< Traits::IsSpecializationOf< Type, std::multiset >, Traits::IsSpecializationOf< Type, std::unordered_multiset >, TreatAsMultiSet< Type > > IsMultiSet
Traits::All< Traits::IsIteratable< Type >, Traits::Not< Traits::IsSpecializationOf< Type, std::basic_string > >, Traits::Not< IsMapOrHash< Type > >, Traits::Not< IsSet< Type > >, Traits::Not< IsMultiSet< Type > >> IsArray
Traits::All< Traits::IsIteratable< Type >, Traits::Not< Traits::IsSpecializationOf< Type, std::basic_string > >> IsIteratableExceptString