00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __loaded__expr_test_cpp__
00021 #define __loaded__expr_test_cpp__
00022 using namespace std;
00023 #line 1 "expr-test.c++"
00024 #include <iostream>
00025 #include <stdlib.h>
00026 #include <qstring.h>
00027 #include <typeinfo>
00028 #include <map>
00029 #include "expr.h"
00030 namespace BorgIv{
00035 class StringKey: public QString, public BorgIv::Key
00036 {
00037 public:
00038 StringKey(const char* k): QString(k)
00039 {
00040 }
00041 };
00042
00043 class StringData: public BorgIv::ExpData, public QString
00044 {
00045 public:
00046 StringData(QString k): QString(k)
00047 {
00048 }
00049 virtual ExpData* new_copy() const
00050 {
00051 return new StringData(*this);
00052 }
00053 virtual Exp operator[](Key*key) const
00054 {
00055 assert(0);
00056 return Exp();
00057 }
00058 };
00059
00060 class WriteExp: public Exp
00061 {
00062 public:
00063 WriteExp(Exp& e): Exp(e)
00064 {
00065 }
00066 void operator =(QString s)
00067 {
00068 Exp::operator=(new StringData(s));
00069 }
00070 };
00071
00072 class TokenData: public ExpData
00073 {
00074 map<QString,Exp> content;
00075 protected:
00076 virtual ExpData* new_copy() const
00077 {
00078 return new TokenData(*this);
00079 }
00080 public:
00081 virtual Exp operator[](Key*key) const
00082 {
00083 StringKey* k = dynamic_cast<StringKey*>(key);
00084 if (content.find(*k)==content.end()) return Exp();
00085 else return content.find(*k)->second;
00086 }
00087 WriteExp operator[](QString k)
00088 {
00089 return content[k];
00090 }
00091 };
00092
00093 }
00094
00095 using namespace BorgIv;
00096 int main(int argc, char* argv[])
00097 {
00098 TokenData token;
00099 token["Test"]="10";
00100 Exp expr(token);
00101 StringKey k("test");
00102 cout << ((StringData*)expr[&k])->toStdString();
00103
00104 }
00105
00106 #endif // __loaded__expr_test_cpp__