00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __loaded__data_token_h__
00021 #define __loaded__data_token_h__
00022 using namespace std;
00023 #line 1 "data-token.h++"
00024 #include <vector>
00025 #include <map>
00026 #include "symbol.h"
00027 using namespace std;
00028
00029
00030
00031
00032 class Token: public DataClass
00033 {
00034 struct TokenContent
00035 {
00036 map<Symbol, Data, symbolLesser> content;
00037 int refcount;
00038 TokenContent() : content()
00039 {
00040 refcount = 1;
00041 };
00042 } * content;
00043 protected:
00044 virtual QString type_name() const
00045 {
00046 return type();
00047 };
00048 virtual DataClass* shallow_copy() const
00049 {
00050 return new Token(*this);
00051 };
00052 virtual void visit(DataVisitor&v);
00053 public:
00054 static QString type()
00055 {
00056 return "Token";
00057 }
00058 Token();
00059 Token(const Token& dc);
00060 Token& operator = (const Token& dc);
00061 virtual ~Token();
00062
00063 int count() const
00064 {
00065 return content->content.size();
00066 };
00067 void define(Symbol key, Data val)
00068 {
00069 content->content[key]=val;
00070 };
00071 virtual Data getField(QString s)
00072 {
00073 return content->content[Symbol(s)];
00074 }
00075 virtual void setField(QString s,Data d)
00076 {
00077 content->content[Symbol(s)]=d;
00078 }
00079 Data& operator[](Symbol s) const
00080 {
00081 return content->content[s];
00082 };
00083 Data& operator[](Symbol *s) const
00084 {
00085 return content->content[*s];
00086 };
00087 vector<Symbol> keys() const;
00088 };
00089 #endif // __loaded__data_token_h__