1 #ifndef LOADER_PARSEDSOURCE_H_
2 #define LOADER_PARSEDSOURCE_H_
25 ScriptToken(const std::string &, Type);
26 explicit ScriptToken(Literal *);
29 ScriptToken(const ScriptToken &);
30 ScriptToken &operator =(const ScriptToken &);
33 Type GetType() const { return type; }
34 const std::string &RegisterName() const;
35 const std::string &CommandName() const;
36 const std::string &Identifier() const;
37 const std::string &Label() const;
38 const Literal *GetLiteral() const;
65 explicit Literal(const std::vector<Value *> &);
66 Literal(const std::string &, const std::vector<PropertyList *> &);
67 explicit Literal(bool);
68 Literal(int r, int g, int b, int a = 255);
69 explicit Literal(int number);
70 Literal(const std::string &dir, const std::string &path);
71 Literal(const std::string &);
72 Literal(int x, int y);
73 Literal(const std::string &typeName, PropertyList *properties);
74 explicit Literal(const std::vector<ScriptToken *> &);
77 Literal(const Literal &);
78 Literal &operator =(const Literal &);
81 Type GetType() const { return type; }
82 bool IsArray() const { return GetType() == ARRAY_VALUES || GetType() == ARRAY_PROPS; }
83 bool IsObject() const { return GetType() == OBJECT; }
84 int ArraySize() const { return GetType() == ARRAY_VALUES ? GetValues().size() : GetPropertyLists().size(); }
86 const std::vector<Value *> &GetValues() const;
87 const std::vector<PropertyList *> &GetPropertyLists() const;
88 bool GetBoolean() const;
93 int GetNumber() const;
94 const std::string &GetString() const;
97 const std::string &GetTypeName() const;
98 const PropertyList *GetProperties() const;
99 const std::vector<ScriptToken *> &GetScript() const;
103 std::string typeName, str;
104 std::vector<Value *> values;
105 std::vector<PropertyList *> propertyLists;
106 std::vector<ScriptToken *> script;
117 explicit Value(const std::string &identifier)
118 : literal(0), identifier(identifier), isLiteral(false) { }
119 explicit Value(Literal *literal)
120 : literal(literal), isLiteral(true) { }
123 Value(const Value &);
124 Value &operator =(const Value &);
127 bool IsLiteral() const { return isLiteral; }
128 const Literal &GetLiteral() const;
129 const std::string &GetIdentifier() const;
133 std::string identifier;
145 PropertyList(const PropertyList &);
146 PropertyList &operator =(const PropertyList &);
149 void SetProperty(const std::string &name, Value *value) {
153 typedef std::map<std::string, Value *>::iterator Iterator;
154 typedef std::map<std::string, Value *>::const_iterator ConstIterator;
155 Iterator Begin() { return props.begin(); }
156 ConstIterator Begin() const { return props.begin(); }
157 Iterator End() { return props.end(); }
158 ConstIterator End() const { return props.end(); }
161 std::map<std::string, Value *> props;
169 Declaration(const std::string &typeName, const std::string &identifier)
170 : typeName(typeName), identifier(identifier) { }
171 virtual ~Declaration() { }
173 Declaration(const Declaration &);
174 Declaration &operator =(const Declaration &);
177 const std::string &TypeName() const { return typeName; }
178 const std::string &Identifier() const { return identifier; }
181 std::string typeName;
182 std::string identifier;
188 : public Declaration {
191 Definition(const std::string &typeName, const std::string &identifier)
192 : Declaration(typeName, identifier), value(0), isLiteral(false) { }
193 virtual ~Definition();
195 Definition(const Definition &);
196 Definition &operator =(const Definition &);
199 void SetValue(Literal *);
200 void SetValue(PropertyList *);
202 bool HasLiteralValue() const { return isLiteral && value; }
203 bool HasProperties() const { return !isLiteral && value; }
204 Literal *GetLiteral();
205 const Literal *GetLiteral() const;
206 PropertyList *GetProperties();
207 const PropertyList *GetProperties() const;
222 ParsedSource(const ParsedSource &);
223 ParsedSource &operator =(const ParsedSource &);
226 void AddDeclaration(Declaration *);
227 void AddDefinition(Definition *);
228 void ExportDeclaration(Declaration *);
229 void ExportIdentifier(const std::string &);
231 bool IsDeclared(const std::string &) const;
232 Declaration &GetDeclaration(const std::string &);
233 const Declaration &GetDeclaration(const std::string &) const;
234 bool IsDefined(const std::string &) const;
235 Definition &GetDefinition(const std::string &);
236 const Definition &GetDefinition(const std::string &) const;
238 const std::map<std::string, Declaration *> &Declarations() const { return declarations; }
239 const std::map<std::string, Definition *> &Definitions() const { return definitions; }
240 const std::set<std::string> &Exports() const { return exports; }
243 void WriteHeader(std::ostream &) const;
246 std::map<std::string, Declaration *> declarations;
247 std::map<std::string, Definition *> definitions;
248 std::set<std::string> exports;
257 ostream &operator <<(ostream &, const loader::ParsedSource &);
258 ostream &operator <<(ostream &, const loader::Literal &);
262 #endif /* LOADER_PARSEDSOURCE_H_ */