#ifndef VARIABLE_H_ #define VARIABLE_H_ #include "SharedRef.h" #include #include typedef enum {Void, List, String, BoolType} VarType; class TokenStream; class Variable; typedef SharedPtr VariablePtr; class Variable { public: Variable(VarType T, const std::string& Value, bool IsConst); void set(const std::string& Name, const VariablePtr& other); void insert(const std::string& Name, const VariablePtr& other); VariablePtr find(const std::string& aName); const VariablePtr find(const std::string& aName) const; VariablePtr findOrCreate(const std::string& Name); void remove(const std::string& Key); VarType type() const; std::string value() const; unsigned int size() const; const VariablePtr& get(unsigned int idx) const; VariablePtr& get(unsigned int idx); const std::string name(unsigned int idx) const; VariablePtr deepCopy() const; private: VarType Type; bool IsConst; std::string Value; std::vector< std::pair > Vars; friend VariablePtr constructVar(VarType Type, const std::string& Value, bool IsConst); }; VariablePtr constructString(const std::string& Val, bool c); VariablePtr constructList(bool c); VariablePtr constructVoid(bool IsConst); VariablePtr constructBool(bool Value, bool IsConst); VariablePtr convertTo(VarType T, VariablePtr Src); bool isBoolTrue(VariablePtr T); std::string stringValue(const VariablePtr& T); const VariablePtr childOrVoid(const VariablePtr& Parent, const std::string& Name); VariablePtr parseFrom(TokenStream& s); void print(const std::string& In, const VariablePtr& V); #endif