00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 #ifndef __loaded__data_token_cpp__
00021 #define __loaded__data_token_cpp__
00022 using namespace std;
00023 #line 1 "data-token.c++"
00024 #include "data-token.h"
00025 #include "data-visitor.h"
00026 
00027 
00028 
00029 
00030 Token::Token() 
00031 {
00032   content = new TokenContent();
00033 };
00034 
00035 Token::Token(const Token& dc) : DataClass()
00036 {
00037   content = dc.content;
00038   content -> refcount++;
00039 }
00040 
00041 Token::~Token()
00042 {
00043   if (--content->refcount==0)
00044     delete content;
00045 }
00046 
00047 Token& Token::operator = (const Token& dc)
00048 {
00049   if (content!=dc.content)
00050     {
00051       if(--content->refcount==0) 
00052         delete content;
00053       content = dc.content;
00054       content->refcount++;
00055     }
00056   return *this;
00057 };
00058 
00059 vector<Symbol> Token::keys() const
00060 {
00061   vector<Symbol> result;
00062   map<Symbol, Data, symbolLesser>::const_iterator cur = content->content.begin();
00063   while(cur!=content->content.end())
00064     {
00065       pair<Symbol,Data> v=*cur;
00066       result.push_back(v.first);
00067       cur++;
00068     }
00069   return result;
00070 };
00071 
00072 void Token::visit(DataVisitor&v)
00073 {
00074   v.visit(*this);
00075 }
00076 
00077 #endif // __loaded__data_token_cpp__