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