16#include <unordered_map>
67 if constexpr (std::is_same<T, bool>::value)
79 using SharedVector = std::shared_ptr<ValueVector>;
80 using SharedStruct = std::shared_ptr<ValueStruct>;
145 _string =
new std::string(str);
150 _string =
new std::string(str);
155 _string =
new std::string(str);
160 _vector =
new SharedVector(std::make_shared<ValueVector>(vec));
165 _struct =
new SharedStruct(std::make_shared<ValueStruct>(s));
167 template<
typename T,
size_t N>
171 _vector =
new SharedVector(std::make_shared<ValueVector>(
174 std::array<Value, N> arr_value;
175 for (
size_t i = 0; i <
N; ++i)
176 arr_value[i] = arr[i];
177 _from_array(arr_value);
182 operator bool()
const
197 template <
typename T>
203 ret =
static_cast<T>(
_bool);
206 ret =
static_cast<T>(
_char);
218 ret =
static_cast<T>(
_int);
221 ret =
static_cast<T>(
_uint);
224 ret =
static_cast<T>(
_i64);
252 _log_cast_failed(type);
357 if (!_check_array(
N))
359 std::array<Value, N> ret{};
364 void _log_cast_failed(
ValueType type)
const;
366 void _from_array(
const std::span<Value>& arr);
367 void _to_array(
const std::span<Value>& arr)
const;
368 bool _check_array(
size_t size)
const;
372 using ValueTable = std::unordered_map<std::string, Value, string_hash, std::equal_to<>>;
380 _metaStruct[std::string{ struct_name }] = meta_table;
384 return _metaStruct[std::string{ struct_name }];
387 std::unordered_map<std::string, ValueTable, string_hash, std::equal_to<>> _metaStruct;
439 std::vector<Value> _vec;
unsigned char ToUChar() const
std::string ToString() const
Value(std::string_view str)
bool _type_cast(T &ret, ValueType type) const
Value(const ValueStruct &s)
unsigned short ToUShort() const
const ValueVector & ToVector() const
Value(const std::array< T, N > &arr)
Value(const ValueVector &vec)
uint64_t ToUInt64() const
const ValueStruct & ToStruct() const
Value & operator=(const Value &b)
Value(const std::string &str)
std::string GetString(bool add_quotes=true) const
std::array< Value, N > ToArray() const
ValueStruct(std::string_view name)
Value & GetMember(std::string_view key)
Value & operator[](std::string_view key)
void AddMember(std::string_view key, Value &v)
ValueTable & GetMemberAll()
ValueTable & GetStructMeta(std::string_view struct_name)
void RegisterStruct(std::string_view struct_name, const ValueTable &meta_table={})
std::vector< Value > & GetVector()
ValueVector(ValueType type)
Value & operator[](size_t i)
void PushBack(const Value &v)
std::string_view Type2CppType(ValueType v)
类型转C++类型字符串
std::unordered_map< std::string, Value, string_hash, std::equal_to<> > ValueTable
std::string to_string(T v)
to_string包装
consteval ValueType ClassType2ValueType()
ValueTypeInfo String2ValueTypeEx(std::string_view str)
std::string Type2CppTypeEx(ValueType v0, ValueType v1, size_t length)
ValueType String2ValueType(std::string_view str)
const ValueVector NULL_VALUE_VECTOR
const ValueStruct NULL_VALUE_STRUCT