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
00039
00040
00041
00042
00043
00044 #ifdef GECODE_HAS_INT_VARS
00045 namespace Gecode { namespace Int {
00047 class IntVarImpBase : public Gecode::VarImp<Gecode::Int::IntVarImpConf> {
00048 protected:
00050 IntVarImpBase(Gecode::Space& home, bool share, IntVarImpBase& x);
00051 public:
00053 IntVarImpBase(void);
00055 IntVarImpBase(Gecode::Space& home);
00057
00058
00070 void subscribe(Gecode::Space& home, Gecode::Propagator& p, Gecode::PropCond pc, bool assigned, bool schedule);
00072 void subscribe(Gecode::Space& home, Gecode::Advisor& a, bool assigned);
00074 Gecode::ModEvent notify(Gecode::Space& home, Gecode::ModEvent me, Gecode::Delta& d);
00076 };
00077 }}
00078 #endif
00079 #ifdef GECODE_HAS_INT_VARS
00080 namespace Gecode { namespace Int {
00082 class BoolVarImpBase : public Gecode::VarImp<Gecode::Int::BoolVarImpConf> {
00083 protected:
00085 BoolVarImpBase(Gecode::Space& home, bool share, BoolVarImpBase& x);
00086 public:
00088 BoolVarImpBase(void);
00090 BoolVarImpBase(Gecode::Space& home);
00092
00093
00105 void subscribe(Gecode::Space& home, Gecode::Propagator& p, Gecode::PropCond pc, bool assigned, bool schedule);
00107 void subscribe(Gecode::Space& home, Gecode::Advisor& a, bool assigned);
00109 Gecode::ModEvent notify(Gecode::Space& home, Gecode::ModEvent me, Gecode::Delta& d);
00111 };
00112 }}
00113 #endif
00114 #ifdef GECODE_HAS_SET_VARS
00115 namespace Gecode { namespace Set {
00117 class SetVarImpBase : public Gecode::VarImp<Gecode::Set::SetVarImpConf> {
00118 protected:
00120 SetVarImpBase(Gecode::Space& home, bool share, SetVarImpBase& x);
00121 public:
00123 SetVarImpBase(void);
00125 SetVarImpBase(Gecode::Space& home);
00127
00128
00140 void subscribe(Gecode::Space& home, Gecode::Propagator& p, Gecode::PropCond pc, bool assigned, bool schedule);
00142 void subscribe(Gecode::Space& home, Gecode::Advisor& a, bool assigned);
00144 Gecode::ModEvent notify(Gecode::Space& home, Gecode::ModEvent me, Gecode::Delta& d);
00146 };
00147 }}
00148 #endif
00149 #ifdef GECODE_HAS_INT_VARS
00150 namespace Gecode { namespace Int {
00151
00152 forceinline
00153 IntVarImpBase::IntVarImpBase(void) {}
00154
00155 forceinline
00156 IntVarImpBase::IntVarImpBase(Gecode::Space& home)
00157 : Gecode::VarImp<Gecode::Int::IntVarImpConf>(home) {}
00158
00159 forceinline
00160 IntVarImpBase::IntVarImpBase(Gecode::Space& home, bool share, IntVarImpBase& x)
00161 : Gecode::VarImp<Gecode::Int::IntVarImpConf>(home,share,x) {}
00162
00163 forceinline void
00164 IntVarImpBase::subscribe(Gecode::Space& home, Gecode::Propagator& p, Gecode::PropCond pc, bool assigned, bool schedule) {
00165 Gecode::VarImp<Gecode::Int::IntVarImpConf>::subscribe(home,p,pc,assigned,ME_INT_BND,schedule);
00166 }
00167 forceinline void
00168 IntVarImpBase::subscribe(Gecode::Space& home, Gecode::Advisor& a, bool assigned) {
00169 Gecode::VarImp<Gecode::Int::IntVarImpConf>::subscribe(home,a,assigned);
00170 }
00171
00172 forceinline Gecode::ModEvent
00173 IntVarImpBase::notify(Gecode::Space& home, Gecode::ModEvent me, Gecode::Delta& d) {
00174 switch (me) {
00175 case ME_INT_VAL:
00176
00177 schedule(home,PC_INT_VAL,PC_INT_DOM,ME_INT_VAL);
00178 if (!Gecode::VarImp<Gecode::Int::IntVarImpConf>::advise(home,ME_INT_VAL,d))
00179 return ME_INT_FAILED;
00180 cancel(home);
00181 break;
00182 case ME_INT_BND:
00183
00184 schedule(home,PC_INT_BND,PC_INT_DOM,ME_INT_BND);
00185 if (!Gecode::VarImp<Gecode::Int::IntVarImpConf>::advise(home,ME_INT_BND,d))
00186 return ME_INT_FAILED;
00187 break;
00188 case ME_INT_DOM:
00189
00190 schedule(home,PC_INT_DOM,PC_INT_DOM,ME_INT_DOM);
00191 if (!Gecode::VarImp<Gecode::Int::IntVarImpConf>::advise(home,ME_INT_DOM,d))
00192 return ME_INT_FAILED;
00193 break;
00194 default: GECODE_NEVER;
00195 }
00196 return me;
00197 }
00198
00199 }}
00200 #endif
00201 #ifdef GECODE_HAS_INT_VARS
00202 namespace Gecode { namespace Int {
00203
00204 forceinline
00205 BoolVarImpBase::BoolVarImpBase(void) {}
00206
00207 forceinline
00208 BoolVarImpBase::BoolVarImpBase(Gecode::Space& home)
00209 : Gecode::VarImp<Gecode::Int::BoolVarImpConf>(home) {}
00210
00211 forceinline
00212 BoolVarImpBase::BoolVarImpBase(Gecode::Space& home, bool share, BoolVarImpBase& x)
00213 : Gecode::VarImp<Gecode::Int::BoolVarImpConf>(home,share,x) {}
00214
00215 forceinline void
00216 BoolVarImpBase::subscribe(Gecode::Space& home, Gecode::Propagator& p, Gecode::PropCond pc, bool assigned, bool schedule) {
00217 Gecode::VarImp<Gecode::Int::BoolVarImpConf>::subscribe(home,p,pc,assigned,ME_BOOL_VAL,schedule);
00218 }
00219 forceinline void
00220 BoolVarImpBase::subscribe(Gecode::Space& home, Gecode::Advisor& a, bool assigned) {
00221 Gecode::VarImp<Gecode::Int::BoolVarImpConf>::subscribe(home,a,assigned);
00222 }
00223
00224 forceinline Gecode::ModEvent
00225 BoolVarImpBase::notify(Gecode::Space& home, Gecode::ModEvent, Gecode::Delta& d) {
00226 schedule(home,PC_BOOL_VAL,PC_BOOL_VAL,ME_BOOL_VAL);
00227 if (!Gecode::VarImp<Gecode::Int::BoolVarImpConf>::advise(home,ME_BOOL_VAL,d))
00228 return ME_BOOL_FAILED;
00229 cancel(home);
00230 return ME_BOOL_VAL;
00231 }
00232
00233 }}
00234 #endif
00235 #ifdef GECODE_HAS_SET_VARS
00236 namespace Gecode { namespace Set {
00237
00238 forceinline
00239 SetVarImpBase::SetVarImpBase(void) {}
00240
00241 forceinline
00242 SetVarImpBase::SetVarImpBase(Gecode::Space& home)
00243 : Gecode::VarImp<Gecode::Set::SetVarImpConf>(home) {}
00244
00245 forceinline
00246 SetVarImpBase::SetVarImpBase(Gecode::Space& home, bool share, SetVarImpBase& x)
00247 : Gecode::VarImp<Gecode::Set::SetVarImpConf>(home,share,x) {}
00248
00249 forceinline void
00250 SetVarImpBase::subscribe(Gecode::Space& home, Gecode::Propagator& p, Gecode::PropCond pc, bool assigned, bool schedule) {
00251 Gecode::VarImp<Gecode::Set::SetVarImpConf>::subscribe(home,p,pc,assigned,ME_SET_CBB,schedule);
00252 }
00253 forceinline void
00254 SetVarImpBase::subscribe(Gecode::Space& home, Gecode::Advisor& a, bool assigned) {
00255 Gecode::VarImp<Gecode::Set::SetVarImpConf>::subscribe(home,a,assigned);
00256 }
00257
00258 forceinline Gecode::ModEvent
00259 SetVarImpBase::notify(Gecode::Space& home, Gecode::ModEvent me, Gecode::Delta& d) {
00260 switch (me) {
00261 case ME_SET_VAL:
00262
00263 schedule(home,PC_SET_VAL,PC_SET_ANY,ME_SET_VAL);
00264 if (!Gecode::VarImp<Gecode::Set::SetVarImpConf>::advise(home,ME_SET_VAL,d))
00265 return ME_SET_FAILED;
00266 cancel(home);
00267 break;
00268 case ME_SET_CARD:
00269
00270 schedule(home,PC_SET_CARD,PC_SET_ANY,ME_SET_CARD);
00271 if (!Gecode::VarImp<Gecode::Set::SetVarImpConf>::advise(home,ME_SET_CARD,d))
00272 return ME_SET_FAILED;
00273 break;
00274 case ME_SET_LUB:
00275
00276 schedule(home,PC_SET_CLUB,PC_SET_CLUB,ME_SET_LUB);
00277 schedule(home,PC_SET_ANY,PC_SET_ANY,ME_SET_LUB);
00278 if (!Gecode::VarImp<Gecode::Set::SetVarImpConf>::advise(home,ME_SET_LUB,d))
00279 return ME_SET_FAILED;
00280 break;
00281 case ME_SET_GLB:
00282
00283 schedule(home,PC_SET_CGLB,PC_SET_ANY,ME_SET_GLB);
00284 if (!Gecode::VarImp<Gecode::Set::SetVarImpConf>::advise(home,ME_SET_GLB,d))
00285 return ME_SET_FAILED;
00286 break;
00287 case ME_SET_BB:
00288
00289 schedule(home,PC_SET_CLUB,PC_SET_ANY,ME_SET_BB);
00290 if (!Gecode::VarImp<Gecode::Set::SetVarImpConf>::advise(home,ME_SET_BB,d))
00291 return ME_SET_FAILED;
00292 break;
00293 case ME_SET_CLUB:
00294
00295 schedule(home,PC_SET_CARD,PC_SET_ANY,ME_SET_CLUB);
00296 if (!Gecode::VarImp<Gecode::Set::SetVarImpConf>::advise(home,ME_SET_CLUB,d))
00297 return ME_SET_FAILED;
00298 break;
00299 case ME_SET_CGLB:
00300
00301 schedule(home,PC_SET_CARD,PC_SET_ANY,ME_SET_CGLB);
00302 if (!Gecode::VarImp<Gecode::Set::SetVarImpConf>::advise(home,ME_SET_CGLB,d))
00303 return ME_SET_FAILED;
00304 break;
00305 case ME_SET_CBB:
00306
00307 schedule(home,PC_SET_CARD,PC_SET_ANY,ME_SET_CBB);
00308 if (!Gecode::VarImp<Gecode::Set::SetVarImpConf>::advise(home,ME_SET_CBB,d))
00309 return ME_SET_FAILED;
00310 break;
00311 default: GECODE_NEVER;
00312 }
00313 return me;
00314 }
00315
00316 }}
00317 #endif
00318 namespace Gecode {
00319
00320 forceinline void
00321 Space::update(ActorLink** sub) {
00322 #ifdef GECODE_HAS_INT_VARS
00323 Gecode::VarImp<Gecode::Int::IntVarImpConf>::update(*this,sub);
00324 #endif
00325 #ifdef GECODE_HAS_INT_VARS
00326 Gecode::VarImp<Gecode::Int::BoolVarImpConf>::update(*this,sub);
00327 #endif
00328 #ifdef GECODE_HAS_SET_VARS
00329 Gecode::VarImp<Gecode::Set::SetVarImpConf>::update(*this,sub);
00330 #endif
00331 }
00332 }
00333