75 using PropertyBase::PropertyBase;
78 template<
typename T, std::enable_if_t<std::is_
integral_v<T>,
int> = 0>
80 template<
typename T, std::enable_if_t<std::is_
floating_po
int_v<T>,
int> = 0>
98 bool is_null()
const {
return index() == 0 || index() == std::variant_npos; }
99 bool is_bool()
const {
return index() == 1; }
100 bool is_number()
const {
return index() == 2 || index() == 3; }
101 bool is_integer()
const {
return index() == 2 || index() == 3; }
107 bool is_map()
const {
return index() == 9; }
109 bool get_bool(
bool def =
false)
const {
return _get(std::move(def)); }
113 return double(_get(int64_t(def)));
115 return _get(std::move(def));
120 return int64_t(_get(
double(def)));
122 return _get(std::move(def));
128 StringName get_string(std::string_view def = {})
const {
return _get<std::string_view, StringName>(std::move(def)); }
132 template <
typename T, std::enable_if_t<std::is_
integral_v<T>,
int> = 0>
134 template <
typename T, std::enable_if_t<std::is_
floating_po
int_v<T>,
int> = 0>
148 template <
typename T,
typename U = T>
149 U _get(T &&def)
const
151 if (
auto *ptr = std::get_if<U>(
this))
154 return std::move(def);
182 if (map && map->m_keys.size() > idx && !map->m_keys[idx])
189 operator bool() {
return map && idx < map->
Capacity(); }
208 size_t Size()
const {
return m_entries; }
210 bool Empty()
const {
return !m_entries; }
217 return GetRef(hash).second;
243 void SetRef(uint32_t hash,
value_type &&value);
248 std::vector<uint32_t> m_keys;
249 std::vector<value_type> m_values;
Color4ub Color
Definition Color.h:212
constexpr uint32_t hash_32_fnv1a(const char *const data, size_t len)
Definition FNV1a.h:13
nlohmann::json Json
Definition Json.h:8
void from_json(const Json &obj, Property &n)
Definition Property.cpp:35
void to_json(Json &obj, const Property &n)
Definition Property.cpp:76
std::variant< std::nullptr_t, bool, double, int64_t, vector2d, vector3d, Color, Quaternionf, StringName, PropertyMapWrapper > PropertyBase
Definition Property.h:62
Quaternion< float > Quaternionf
Definition Quaternion.h:277
Definition Property.h:171
bool Empty() const
Definition Property.h:210
const value_type * pointer
Definition Property.h:175
iterator cbegin() const
Definition Property.h:236
void SaveToJson(Json &obj)
Definition Property.cpp:162
size_t Capacity() const
Definition Property.h:209
const Property & Get(std::string_view str) const
Definition Property.h:221
void Set(std::string_view str, Property &&prop)
Definition Property.h:224
iterator end()
Definition Property.h:235
PropertyMap()
Definition Property.cpp:132
const Property & Get(const StringName &str) const
Definition Property.h:220
void Set(std::string_view str, const T &prop)
Definition Property.h:230
void Set(const StringName &key, Property &&prop)
Definition Property.h:223
void Clear()
Definition Property.cpp:211
void LoadFromJson(const Json &obj)
Definition Property.cpp:151
const Property & Get(const char str[N]) const
Definition Property.h:214
std::pair< StringName, Property > value_type
Definition Property.h:173
void Set(const StringName &key, const T &prop)
Definition Property.h:228
iterator cend() const
Definition Property.h:237
const value_type & reference
Definition Property.h:174
iterator begin()
Definition Property.h:234
~PropertyMap()
Definition Property.cpp:144
size_t Size() const
Definition Property.h:208
bool is_number() const
Definition Property.h:100
bool is_color() const
Definition Property.h:104
bool is_null() const
Definition Property.h:98
Property(PropertyMap *map)
Definition Property.h:84
bool is_vector2() const
Definition Property.h:102
bool get_bool(bool def=false) const
Definition Property.h:109
vector3d get_vector3(vector3d def={}) const
Definition Property.h:125
Quaternionf get_quat(Quaternionf def={}) const
Definition Property.h:127
Property(const char(&s)[N])
Definition Property.h:88
int64_t get_integer(int64_t def=0) const
Definition Property.h:117
bool is_map() const
Definition Property.h:107
bool is_quat() const
Definition Property.h:105
bool is_vector3() const
Definition Property.h:103
bool is_bool() const
Definition Property.h:99
StringName get_string(std::string_view def={}) const
Definition Property.h:128
Property(const char *s)
Definition Property.h:91
double get_number(double def=0.0) const
Definition Property.h:110
bool is_string() const
Definition Property.h:106
PropertyMap * get_map(PropertyMap *def={}) const
Definition Property.h:129
bool is_integer() const
Definition Property.h:101
Property(const T &arg)
Definition Property.h:79
Color get_color(Color def={}) const
Definition Property.h:126
vector2d get_vector2(vector2d def={}) const
Definition Property.h:124
Property(std::string_view s)
Definition Property.h:93
Property(const std::string &s)
Definition Property.h:95
Definition RefCounted.h:11
Definition StringName.h:18
uint32_t hash() const
Definition StringName.h:43
PropertyMapWrapper & operator=(const PropertyMapWrapper &rhs)
Definition Property.cpp:22
PropertyMap * get() const
Definition Property.h:43
auto begin()
Definition Property.h:253
~PropertyMapWrapper()
Definition Property.cpp:16
PropertyMap * operator*() const
Definition Property.h:40
PropertyMapWrapper()
Definition Property.h:27
auto end()
Definition Property.h:254
PropertyMap * operator->() const
Definition Property.h:41
PropertyMapWrapper(const PropertyMapWrapper &rhs)
Definition Property.h:32
Definition Property.h:177
pointer operator->()
Definition Property.h:186
iterator(const PropertyMap *m, uint32_t i)
Definition Property.h:178
bool operator!=(const iterator &rhs)
Definition Property.h:192
bool operator==(const iterator &rhs)
Definition Property.h:191
iterator operator++()
Definition Property.cpp:114
reference operator*()
Definition Property.h:187
vector2< double > vector2d
Definition vector2.h:134
vector3< double > vector3d
Definition vector3.h:290