00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #include "warner.hh"
00024
00025 void Warner::warn(int w) {
00026 if (bh != NULL)
00027 bh->vartouched(w,sp);
00028 }
00029
00030
00031 void Warner::setBH(BranchingHeuristic* b) {
00032 bh=b;
00033 }
00034
00035
00036 IntWarningProp::IntWarningProp(Space* home, int v, IntView vv, Warner* f, bool fd) : UnaryPropagator<IntView,PC_INT_DOM>(home,vv) {
00037 var=v;
00038 toWarn=f;
00039 }
00040
00041 IntWarningProp::IntWarningProp(Space* home, bool share, IntWarningProp& p) : UnaryPropagator<IntView,PC_INT_DOM>(home,share,p) {
00042 var=p.var;
00043 toWarn=p.toWarn;
00044 }
00045
00046 IntWarningProp::~IntWarningProp(void) {}
00047
00048 PropCost IntWarningProp::cost(void) const {return PC_CRAZY_HI;}
00049
00050 ExecStatus IntWarningProp::propagate(Space * home) {
00051 toWarn->warn(var);
00052 return ES_NOFIX;
00053 }
00054
00055 Actor* IntWarningProp::copy(Space* home,bool share) {return new (home) IntWarningProp(home,share,*this);}
00056
00057 ExecStatus IntWarningProp::warning(Space* home, int v, IntView vv, Warner* f) {
00058 (void) new (home) IntWarningProp(home,v,vv,f);
00059 return ES_OK;
00060 }
00061
00062 void IntWarningProp::IntWarning(Space* home, int v, IntVar iv, Warner* f) {
00063 IntView vv(iv);
00064 GECODE_ES_FAIL(home,warning(home,v,vv,f));
00065 }
00066
00068
00069 BoolWarningProp::BoolWarningProp(Space* home, int v, BoolView vv, Warner* f, bool fd) : UnaryPropagator<BoolView,PC_INT_DOM>(home,vv) {
00070 var=v;
00071 toWarn=f;
00072 }
00073
00074 BoolWarningProp::BoolWarningProp(Space* home, bool share, BoolWarningProp& p) : UnaryPropagator<BoolView,PC_INT_DOM>(home,share,p) {
00075 var=p.var;
00076 toWarn=p.toWarn;
00077 }
00078
00079 BoolWarningProp::~BoolWarningProp(void) {}
00080
00081 PropCost BoolWarningProp::cost(void) const {return PC_CRAZY_HI;}
00082
00083 ExecStatus BoolWarningProp::propagate(Space * home) {
00084 toWarn->warn(var);
00085 return ES_NOFIX;
00086 }
00087
00088 Actor* BoolWarningProp::copy(Space* home,bool share) {return new (home) BoolWarningProp(home,share,*this);}
00089
00090 ExecStatus BoolWarningProp::warning(Space* home, int v, BoolView vv, Warner* f) {
00091 (void) new (home) BoolWarningProp(home,v,vv,f);
00092 return ES_OK;
00093 }
00094
00095 void BoolWarningProp::BoolWarning(Space* home, int v, BoolVar iv, Warner* f) {
00096 BoolView vv(iv);
00097 GECODE_ES_FAIL(home,warning(home,v,vv,f));
00098 }
00099
00100
00101