6#include <unordered_map>
43 virtual bool IsBool()
const {
return false; }
44 virtual bool IsNumber()
const {
return false; }
45 virtual bool IsString()
const {
return false; }
46 virtual bool IsObject()
const {
return false; }
47 virtual bool IsList()
const {
return false; }
48 virtual bool IsNull()
const {
return true; }
51 virtual bool Accept(
Visitor& v,
const char* name =
nullptr)
const {
return true; }
52 virtual operator bool()
const {
return !
IsNull(); }
53 virtual std::string
ToStr()
const {
return ""; }
54 virtual const void*
Data()
const;
60 auto p = std::make_shared<T>();
62 return std::dynamic_pointer_cast<AbstractVar>(p);
74 bool IsBool()
const override {
return true; }
79 bool Val()
const {
return mData; }
80 bool IsNull()
const override {
return false; }
81 bool Accept(
Visitor& v,
const char* name =
nullptr)
const override;
82 std::string
ToStr()
const override;
96 bool IsNumber()
const override {
return true; }
101 bool IsNull()
const override {
return false; }
102 bool Accept(
Visitor& v,
const char* name =
nullptr)
const override;
103 float Val()
const {
return mData; }
104 std::string
ToStr()
const override;
125 const std::string&
Val()
const {
return mData; }
126 bool IsNull()
const override {
return false; }
127 bool Accept(
Visitor& v,
const char* name =
nullptr)
const override;
128 std::string
ToStr()
const override;
180 operator bool()
const override;
185 Var&
Set(
const std::string& propName);
186 Var&
Set(
const std::string& propName,
const Var& value);
187 Var&
Set(
const std::string& propName,
const VarPtr& varPtr);
188 template <
typename T>
189 Var&
Set(
const std::string& propName,
const T& value)
193 const Var&
Get(
const std::string& propName)
const;
194 Var&
Get(
const std::string& propName);
195 bool Has(
const std::string& propName)
const;
196 bool HasOwn(
const std::string& propName)
const;
197 std::shared_ptr<std::string>
GetRelativePath(
const std::string& propName)
const;
198 bool Overridden(
const std::string& propName)
const;
201 bool RenameProperty(
const std::string& propName,
const std::string& newName);
204 bool Accept(
Visitor& v,
const char* name =
nullptr)
const override;
206 bool ForeachProp(
const std::function<
bool(
const std::string&,
const vl::Var&)>& pred,
bool recursive =
false)
const;
207 bool ForeachProp(
const std::function<
bool(
const std::string&,
vl::Var&)>& pred,
bool recursive =
false);
210 std::string
ToStr()
const override;
212 mData->Attach(o, title);
217 inline const void*
Data()
const override {
224 void Clear(
bool recursive =
false);
226 std::shared_ptr<std::string>
getRelativePathRecursive(
const std::string& propName,
const std::string& path =
"")
const;
258 inline operator bool() {
return index >= 0; }
267 bool IsList()
const override {
return true; }
272 bool IsNull()
const override {
return mData ==
nullptr; }
273 bool Accept(
Visitor& v,
const char* name =
nullptr)
const override;
275 return mData ? mData->data.size() : 0;
277 void Clear(
bool recursive =
false);
279 const Var&
At(
int index)
const;
282 template <
typename T>
290 template <
typename T>
297 std::string
ToStr()
const override;
304 inline const void*
Data()
const override {
320 bool IsNull()
const override {
return true; }
323 bool Accept(
Visitor& v,
const char* name =
nullptr)
const override;
324 inline const void*
Data()
const override {
virtual const ObjectVar & AsObject() const
Definition: vl.cpp:106
virtual const BoolVar & AsBool() const
Definition: vl.cpp:85
virtual bool IsNumber() const
Definition: vl.h:44
virtual vl::VarPtr Copy() const
Definition: vl.cpp:154
virtual bool IsNull() const
Definition: vl.h:48
virtual const StringVar & AsString() const
Definition: vl.cpp:99
virtual bool IsList() const
Definition: vl.h:47
virtual const NumberVar & AsNumber() const
Definition: vl.cpp:92
virtual bool IsObject() const
Definition: vl.h:46
virtual bool IsBool() const
Definition: vl.h:43
virtual const void * Data() const
Definition: vl.cpp:148
virtual const ListVar & AsList() const
Definition: vl.cpp:113
virtual bool Accept(Visitor &v, const char *name=nullptr) const
Definition: vl.h:51
virtual std::string ToStr() const
Definition: vl.h:53
VarPtr PtrImpl(const T *body) const
Definition: vl.h:59
virtual Type GetType() const
Definition: vl.cpp:144
virtual bool IsString() const
Definition: vl.h:45
virtual VarPtr Ptr() const =0
const BoolVar & AsBool() const override
Definition: vl.h:75
BoolVar & AsBool() override
Definition: vl.h:76
BoolVar(bool value)
Definition: vl.h:73
std::string ToStr() const override
Definition: vl.cpp:607
Type GetType() const override
Definition: vl.cpp:597
BoolVar & operator=(bool val)
Definition: vl.cpp:612
bool Val() const
Definition: vl.h:79
VarPtr Ptr() const override
Definition: vl.h:78
bool IsNull() const override
Definition: vl.h:80
bool Accept(Visitor &v, const char *name=nullptr) const override
Definition: vl.cpp:602
bool IsBool() const override
Definition: vl.h:74
Type GetType() const override
Definition: vl.cpp:674
bool Remove(int index)
Definition: vl.cpp:762
int Size() const
Definition: vl.h:274
void Attach(Observer *o, const std::string &title="")
Definition: vl.h:298
ListInsertRet Add(const VarPtr &varPtr, int indexBefore=-1)
Definition: vl.cpp:790
std::string ToStr() const override
Definition: vl.cpp:869
const Var & At(int index) const
Definition: vl.cpp:777
void Detach(Observer *o)
Definition: vl.h:301
bool Accept(Visitor &v, const char *name=nullptr) const override
Definition: vl.cpp:715
ListInsertRet Set(int index)
Definition: vl.cpp:815
const void * Data() const override
Definition: vl.h:304
bool IsList() const override
Definition: vl.h:267
ListInsertRet Set(int index, const T &value)
Definition: vl.h:291
vl::VarPtr Copy() const override
Definition: vl.cpp:851
ListInsertRet Add(const T &value, int indexBefore=-1)
Definition: vl.h:283
VarPtr Ptr() const override
Definition: vl.h:271
bool IsNull() const override
Definition: vl.h:272
const ListVar & AsList() const override
Definition: vl.h:268
void Clear(bool recursive=false)
Definition: vl.cpp:729
Var & Back()
Definition: vl.cpp:841
ListVar & AsList() override
Definition: vl.h:269
bool IsEmpty() const
Definition: vl.cpp:846
const void * Data() const override
Definition: vl.h:324
VarPtr Ptr() const override
Definition: vl.h:322
bool Accept(Visitor &v, const char *name=nullptr) const override
Definition: vl.cpp:875
bool IsNull() const override
Definition: vl.h:320
Type GetType() const override
Definition: vl.cpp:880
NumberVar & operator=(int val)
Definition: vl.cpp:638
bool Accept(Visitor &v, const char *name=nullptr) const override
Definition: vl.cpp:626
float Val() const
Definition: vl.h:103
NumberVar(float value)
Definition: vl.h:95
std::string ToStr() const override
Definition: vl.cpp:631
VarPtr Ptr() const override
Definition: vl.h:100
const NumberVar & AsNumber() const override
Definition: vl.h:97
bool IsNull() const override
Definition: vl.h:101
Type GetType() const override
Definition: vl.cpp:621
NumberVar & AsNumber() override
Definition: vl.h:98
bool IsNumber() const override
Definition: vl.h:96
bool ForeachProp(const std::function< bool(const std::string &, const vl::Var &)> &pred, bool recursive=false) const
Definition: vl.cpp:488
void Detach(Observer *o)
Definition: vl.h:214
bool IsNull() const override
Definition: vl.h:203
bool overriddenRecursive(const std::string &propName, int count=0) const
Definition: vl.cpp:356
bool IsObject() const override
Definition: vl.h:177
vl::VarPtr Copy() const
Definition: vl.cpp:472
Var & Set(const std::string &propName)
Definition: vl.cpp:236
Type GetType() const override
Definition: vl.cpp:226
ObjectDataType mData
Definition: vl.h:230
void Attach(Observer *o, const std::string &title="")
Definition: vl.h:211
bool RenameProperty(const std::string &propName, const std::string &newName)
Definition: vl.cpp:420
Object & GetPrototype() const
Definition: vl.cpp:543
bool Accept(Visitor &v, const char *name=nullptr) const override
Definition: vl.cpp:449
const ObjectVar & AsObject() const override
Definition: vl.cpp:216
std::shared_ptr< std::string > getRelativePathRecursive(const std::string &propName, const std::string &path="") const
Definition: vl.cpp:337
int Size() const
Definition: vl.cpp:231
void SetPrototype(const vl::Object &proto)
Definition: vl.cpp:538
Var & Set(const std::string &propName, const T &value)
Definition: vl.h:189
bool RemoveProperty(const std::string &propName)
Definition: vl.cpp:387
bool operator==(const ObjectVar &right) const
Definition: vl.cpp:201
const Var & Get(const std::string &propName) const
Definition: vl.cpp:290
int PropCount() const
Definition: vl.cpp:380
std::shared_ptr< std::string > GetRelativePath(const std::string &propName) const
Definition: vl.cpp:332
std::string ToStr() const override
Definition: vl.cpp:585
const void * Data() const override
Definition: vl.h:217
Observable * Observable()
Definition: vl.h:221
void Clear(bool recursive=false)
Definition: vl.cpp:555
bool Overridden(const std::string &propName) const
Definition: vl.cpp:351
bool HasOwn(const std::string &propName) const
Definition: vl.cpp:324
bool Has(const std::string &propName) const
Definition: vl.cpp:310
VarPtr Ptr() const override
Definition: vl.h:202
Definition: Observable.h:12
Definition: Observer.h:17
const StringVar & AsString() const override
Definition: vl.h:121
bool Accept(Visitor &v, const char *name=nullptr) const override
Definition: vl.cpp:663
VarPtr Ptr() const override
Definition: vl.h:124
StringVar & AsString() override
Definition: vl.h:122
bool IsString() const override
Definition: vl.h:120
bool IsNull() const override
Definition: vl.h:126
std::string ToStr() const override
Definition: vl.cpp:668
StringVar(const std::string &value)
Definition: vl.h:119
Type GetType() const override
Definition: vl.cpp:657
const std::string & Val() const
Definition: vl.h:125
StringVar & operator=(const std::string &val)
Definition: vl.h:129
Definition: JSONConverter.h:9
AbstractVar Var
Definition: vl_fwd.h:39
vl::Object nullObject(nullptr)
Definition: vl.h:233
Type
Definition: vl_fwd.h:9
std::unordered_map< std::string, VarPtr > PropsContainerType
Definition: vl.h:138
vl::ListVar emptyList
Definition: vl.cpp:17
std::shared_ptr< Var > VarPtr
Definition: vl_fwd.h:41
vl::NullVar emptyVar
Definition: vl.cpp:15
std::shared_ptr< PropsDataType > ObjectDataType
Definition: vl.h:171
VarPtr MakePtr(bool value)
Definition: vl.cpp:19
std::shared_ptr< ListDataType > ListVarDataType
Definition: vl.h:246
void Notify(vl::VarPtr info)
Definition: vl.cpp:681
void Update(Observable *sender, vl::VarPtr info=nullptr) override
Definition: vl.cpp:687
std::vector< VarPtr > data
Definition: vl.h:244
vl::Var & data()
Definition: vl.cpp:710
int index
Definition: vl.h:251
ListInsertRet(int index, vl::Var &data)
Definition: vl.h:253
static ListInsertRet Null()
Definition: vl.cpp:705
Object is both an observable and observer. It observes its nested objects's changes
Definition: vl.h:166
PropsContainerType data
Definition: vl.h:169
void Notify(vl::VarPtr info) override
Definition: vl.cpp:173
void Update(Observable *sender, vl::VarPtr info=nullptr) override
Definition: vl.cpp:179