summaryrefslogtreecommitdiffstats
path: root/Variable.h
blob: e32bce4d34043a78d8d48e462c0edacc83cdc9d8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#ifndef VARIABLE_H_
#define VARIABLE_H_

#include "SharedRef.h"
#include <string>
#include <vector>

typedef enum {Void, List, String, BoolType} VarType;

class TokenStream;

class Variable;
typedef SharedPtr<Variable> 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<std::string,VariablePtr> > 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