00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef warner
00024 #define warner
00025
00026 #include <iostream>
00027 #include <cstdlib>
00028 #include "./minimodel.hh"
00029 #include "qecore.hh"
00030
00031
00032 using namespace Gecode;
00033 using namespace Gecode::Int;
00034
00035 class Warner {
00036 private :
00037 BranchingHeuristic* bh;
00038 QSpace* sp;
00039 public :
00040 Warner(QSpace* qs) {bh=NULL;sp=qs;}
00041 void update(QSpace* qs) {sp=qs;}
00042 void setBH(BranchingHeuristic* b);
00043 void warn(int w);
00044 };
00045
00046
00047 class WarningProp : public UnaryPropagator<IntView,PC_INT_DOM> {
00048
00049 private :
00050 int var;
00051 Warner* toWarn;
00052
00053 public :
00054 WarningProp (Space* home, int v, IntView vv, Warner* f, bool fd=false);
00055 WarningProp (Space* home,bool share, WarningProp& p);
00056 ~WarningProp (void);
00057 virtual PropCost cost(void) const;
00058 virtual ExecStatus propagate(Space * home);
00059 virtual Actor* copy(Space* home,bool share);
00060 static ExecStatus warning(Space* home, int v, IntView vv, Warner* f);
00061 static void warning(Space* home, int v, IntVar iv, Warner* f);
00062 };
00063
00064
00065 #endif