Main Page   Class Hierarchy   Compound List   File List   Contact   Download   Symbolic Constraints   Examples  

var_map.h

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     /*{\Marrop returns a proxy to the enrty of |a|. If the proxy class is 
00033       used as rvalue, |inf(a)| is returned. If the proxy class is used as a
00034       lvalue with right-hand-side $v$, |set(a,v)| is called.}*/
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     /*{\Marrop returns a proxy to the enrty of |a|. If the proxy class is 
00068       used as rvalue, |inf(a)| is returned. If the proxy class is used as a
00069       lvalue with right-hand-side $v$, |set(a,v)| is called.}*/
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   //FIXME virtual destructor
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 
Generated on Mon Mar 28 22:03:51 2011 for SCIL by  doxygen 1.6.3