10 struct VariantValue::IRep_ {
11 virtual ~IRep_ () =
default;
12 virtual Type GetType ()
const = 0;
24 inline VariantValue::VariantValue (nullopt_t)
28 inline VariantValue::VariantValue (
const vector<VariantValue>& val)
29 : VariantValue{Sequence<VariantValue> (val)}
32 template <Characters::IConvertibleToString STRINGISH_T>
33 inline VariantValue::VariantValue (STRINGISH_T&& val)
34 requires (not same_as<remove_cvref_t<STRINGISH_T>, String>)
35 : VariantValue{String{forward<STRINGISH_T> (val)}}
39 inline VariantValue::VariantValue (
const optional<T>& val)
40 requires (is_convertible_v<T, VariantValue>)
41 : VariantValue{val.has_value () ? VariantValue{*val} : VariantValue{}}
45 inline VariantValue& VariantValue::operator= (T&& val)
46 requires (
requires (T x) { VariantValue{x}; })
48 *
this = VariantValue{forward<T> (val)};
51 inline VariantValue::Type VariantValue::GetType ()
const
53 if (fVal_ ==
nullptr) {
56 return fVal_->GetType ();
58 inline VariantValue::operator bool ()
const
60 return fVal_ !=
nullptr;
62 template <
typename RETURNTYPE>
63 inline RETURNTYPE VariantValue::As () const
64 requires (Private_::IVariantValueAsBasic_<RETURNTYPE> or
65 (Common::IOptional<RETURNTYPE> and Private_::IVariantValueAsBasic_<Common::ExtractValueType_t<RETURNTYPE>>))
67 if constexpr (same_as<RETURNTYPE, bool>) {
68 return this->AsBool_ ();
70 else if constexpr (same_as<RETURNTYPE, Memory::BLOB>) {
71 return this->AsBLOB_ ();
73 else if constexpr (signed_integral<RETURNTYPE>) {
74 return static_cast<RETURNTYPE
> (this->AsInteger_ ());
76 else if constexpr (unsigned_integral<RETURNTYPE>) {
77 return static_cast<RETURNTYPE
> (this->AsUnsignedInteger_ ());
79 else if constexpr (floating_point<RETURNTYPE>) {
80 return static_cast<RETURNTYPE
> (this->AsFloatType_ ());
82 else if constexpr (same_as<RETURNTYPE, Time::Date>) {
83 return this->AsDate_ ();
85 else if constexpr (same_as<RETURNTYPE, Time::DateTime>) {
86 return this->AsDateTime_ ();
88 else if constexpr (same_as<RETURNTYPE, wstring>) {
89 return this->AsString_ ().As<wstring> ();
91 else if constexpr (same_as<RETURNTYPE, String>) {
92 return this->AsString_ ();
94 else if constexpr (same_as<RETURNTYPE, Mapping<String, VariantValue>>) {
95 return this->AsMapping_ ();
97 else if constexpr (same_as<RETURNTYPE, Sequence<VariantValue>>) {
98 return this->AsSequence_ ();
100 else if constexpr (same_as<RETURNTYPE, map<wstring, VariantValue>>) {
101 return this->AsMapping_ ().Map<map<wstring, VariantValue>> (
102 [] (
auto v) -> pair<wstring, VariantValue> {
return {v.fKey.template As<wstring> (), v.fValue}; });
104 else if constexpr (same_as<RETURNTYPE, vector<VariantValue>>) {
105 return this->AsSequence_ ().As<vector<VariantValue>> ();
107#if qStroika_HasComponent_boost
108 else if constexpr (same_as<RETURNTYPE, boost::json::value>) {
109 return this->AsBoostJSONValue_ ();
112 else if constexpr (Common::IOptional<RETURNTYPE>) {
113 if (this->empty ()) {
117 return this->As<typename RETURNTYPE::value_type> ();
121 inline strong_ordering VariantValue::operator<=> (
const VariantValue& rhs)
const
135 constexpr EnumNames<DataExchange::VariantValue::Type> DefaultNames<DataExchange::VariantValue::Type>::k{{{
136 {DataExchange::VariantValue::eNull, L
"Null"},
137 {DataExchange::VariantValue::eBLOB, L
"BLOB"},
138 {DataExchange::VariantValue::eBoolean, L
"Boolean"},
139 {DataExchange::VariantValue::eInteger, L
"Integer"},
140 {DataExchange::VariantValue::eUnsignedInteger, L
"Unsigned-Integer"},
141 {DataExchange::VariantValue::eFloat, L
"Float"},
142 {DataExchange::VariantValue::eDate, L
"Date"},
143 {DataExchange::VariantValue::eDateTime, L
"DateTime"},
144 {DataExchange::VariantValue::eString, L
"String"},
145 {DataExchange::VariantValue::eArray, L
"Array"},
146 {DataExchange::VariantValue::eMap, L
"Map"},
Simple variant-value (case variant union) object, with (variant) basic types analogous to a value in ...
VariantValue()=default
construct a VariantValue from most any 'basic type' you would expect to find in a weakly typed langua...
Type
Enumeration of variant types.
Compares values as if first normalized with Normalize () method.
Compares values as if first normalized with Normalize () method.