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
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 namespace Gecode { namespace Int { namespace Bool {
00039
00040
00041
00042
00043
00044 template<class BVA, class BVB>
00045 forceinline
00046 BoolBinary<BVA,BVB>::BoolBinary(Home home, BVA b0, BVB b1)
00047 : Propagator(home), x0(b0), x1(b1) {
00048 x0.subscribe(home,*this,PC_BOOL_VAL);
00049 x1.subscribe(home,*this,PC_BOOL_VAL);
00050 }
00051
00052 template<class BVA, class BVB>
00053 forceinline
00054 BoolBinary<BVA,BVB>::BoolBinary(Space& home, bool share,
00055 BoolBinary<BVA,BVB>& p)
00056 : Propagator(home,share,p) {
00057 x0.update(home,share,p.x0);
00058 x1.update(home,share,p.x1);
00059 }
00060
00061 template<class BVA, class BVB>
00062 forceinline
00063 BoolBinary<BVA,BVB>::BoolBinary(Space& home, bool share, Propagator& p,
00064 BVA b0, BVB b1)
00065 : Propagator(home,share,p) {
00066 x0.update(home,share,b0);
00067 x1.update(home,share,b1);
00068 }
00069
00070 template<class BVA, class BVB>
00071 PropCost
00072 BoolBinary<BVA,BVB>::cost(const Space&, const ModEventDelta&) const {
00073 return PropCost::unary(PropCost::LO);
00074 }
00075
00076 template<class BVA, class BVB>
00077 forceinline size_t
00078 BoolBinary<BVA,BVB>::dispose(Space& home) {
00079 x0.cancel(home,*this,PC_BOOL_VAL);
00080 x1.cancel(home,*this,PC_BOOL_VAL);
00081 (void) Propagator::dispose(home);
00082 return sizeof(*this);
00083 }
00084
00085
00086
00087
00088
00089 template<class BVA, class BVB, class BVC>
00090 forceinline
00091 BoolTernary<BVA,BVB,BVC>::BoolTernary
00092 (Home home, BVA b0, BVB b1, BVC b2)
00093 : Propagator(home), x0(b0), x1(b1), x2(b2) {
00094 x0.subscribe(home,*this,PC_BOOL_VAL);
00095 x1.subscribe(home,*this,PC_BOOL_VAL);
00096 x2.subscribe(home,*this,PC_BOOL_VAL);
00097 }
00098
00099 template<class BVA, class BVB, class BVC>
00100 forceinline
00101 BoolTernary<BVA,BVB,BVC>::BoolTernary(Space& home, bool share,
00102 BoolTernary<BVA,BVB,BVC>& p)
00103 : Propagator(home,share,p) {
00104 x0.update(home,share,p.x0);
00105 x1.update(home,share,p.x1);
00106 x2.update(home,share,p.x2);
00107 }
00108
00109 template<class BVA, class BVB, class BVC>
00110 forceinline
00111 BoolTernary<BVA,BVB,BVC>::BoolTernary(Space& home, bool share, Propagator& p,
00112 BVA b0, BVB b1, BVC b2)
00113 : Propagator(home,share,p) {
00114 x0.update(home,share,b0);
00115 x1.update(home,share,b1);
00116 x2.update(home,share,b2);
00117 }
00118
00119 template<class BVA, class BVB, class BVC>
00120 PropCost
00121 BoolTernary<BVA,BVB,BVC>::cost(const Space&, const ModEventDelta&) const {
00122 return PropCost::binary(PropCost::LO);
00123 }
00124
00125 template<class BVA, class BVB, class BVC>
00126 forceinline size_t
00127 BoolTernary<BVA,BVB,BVC>::dispose(Space& home) {
00128 x0.cancel(home,*this,PC_BOOL_VAL);
00129 x1.cancel(home,*this,PC_BOOL_VAL);
00130 x2.cancel(home,*this,PC_BOOL_VAL);
00131 (void) Propagator::dispose(home);
00132 return sizeof(*this);
00133 }
00134
00135 }}}
00136
00137