00001 #ifndef SCIL_VAR_MAP_H
00002 #define SCIL_VAR_MAP_H
00003
00004 #include<scil/variable.h>
00005 #include<scil/row.h>
00006 #include<map>
00007
00008 namespace SCIL {
00009
00010 template<class A>
00011 class scil_map {
00012 public:
00013
00014 virtual
00015 row& operator()(const A&)=0;
00016
00017 virtual ~scil_map() {};
00018 };
00019
00020 template<class A>
00021 class var_map : public scil_map<A> {
00022 private:
00023
00024 std::map<A, var> AV;
00025
00026 public:
00027
00028 var_map() { };
00029
00030 const
00031 var operator[](const A& a) const {
00032
00033
00034
00035 return AV[a];
00036 };
00037
00038 var& operator[](const A& a) {
00039 return AV[a];
00040 };
00041
00042 row& operator()(const A& a) {
00043 row* r=new row(AV[a]);
00044 return *r;
00045 };
00046
00047 virtual
00048 ~var_map() {};
00049 };
00050
00051 template<class A, class B>
00052 class var_map2 : public std::map<A, var_map<B> > {
00053 };
00054
00055 template<class A>
00056 class row_map : public scil_map<A> {
00057 private:
00058
00059 std::map<A, row> AV;
00060
00061 public:
00062
00063 row_map() { };
00064
00065 const
00066 row operator[](const A& a) const {
00067
00068
00069
00070 std::cout<<"hisd\n";
00071 return AV[a];
00072 };
00073
00074 row& operator[](const A& a) {
00075 return AV[a];
00076 };
00077
00078 row& operator()(const A& a) {
00079 return AV[a];
00080 };
00081
00082
00083 virtual
00084 ~row_map() {};
00085 };
00086
00087 template<class A, class B>
00088 class row_map2 : public std::map<A, row_map<B> > {
00089 };
00090
00091 }
00092
00093 #endif
00094