00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 #ifndef VALUEHEUR
00026 #define VALUEHEUR
00027 #include "qecode.hh"
00028 #include "implicative.hh"
00029 using namespace Gecode;
00030 using namespace Gecode::Int;
00031 using namespace std;
00032 
00033 
00034 class QECODE_VTABLE_EXPORT valueHeuristic {
00035     friend class Implicative;
00036 protected :
00037     int whichSpaceOwns(Implicative* imp,int var) {
00038         return imp->whichSpaceOwns[var];
00039     }
00040     
00041     int nbSpaces(Implicative* imp) {
00042         return imp->nbSpaces;
00043     }
00044     
00045     IntVar* getIntVar(Implicative* imp,int scope,int var) {
00046         if (imp->type_of_v[var] != VTYPE_INT) {cout<< "valueHeuristic getIntVar : Variable "<<var<<" is not int"<<endl; abort();}
00047         if (scope<imp->nbSpaces) {
00048             if (imp->ruleDefined[scope]) 
00049                 return (static_cast<IntVar*>(imp->rules[scope]->v[var]));
00050             else 
00051                 return NULL;
00052         }
00053         else {
00054             if (imp->goalDefined) 
00055                 return (static_cast<IntVar*>(imp->goal->v[var]));
00056             else 
00057                 return NULL;
00058         }
00059     }
00060     
00061     bool scopeDefined(Implicative* imp,int scope) {
00062         if (scope == imp->nbSpaces) return imp->goalDefined;
00063         else return imp->ruleDefined[scope];
00064     }
00065 
00066     BoolVar* getBoolVar(Implicative* imp,int scope,int var) {
00067         if (imp->type_of_v[var] != VTYPE_INT) {cout<< "valueHeuristic getBoolVar : Variable "<<var<<" is not bool"<<endl; abort();}
00068         if (scope<imp->nbSpaces) {
00069             if (imp->ruleDefined[scope]) 
00070                 return (static_cast<BoolVar*>(imp->rules[scope]->v[var]));
00071             else 
00072                 return NULL;
00073         }
00074         else {
00075             if (imp->goalDefined) 
00076                 return (static_cast<BoolVar*>(imp->goal->v[var]));
00077             else 
00078                 return NULL;
00079         }
00080     }
00081 
00082 public :
00083     virtual int** subSet(Implicative* home,int var,int* nbRanges)=0;
00084     virtual ~valueHeuristic() {}
00085 };
00086 
00087 
00088 
00089 
00090 
00091 #endif