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_FLOAT_VARS
00150 namespace Gecode { namespace Float {
00152 class FloatVarImpBase : public Gecode::VarImp<Gecode::Float::FloatVarImpConf> {
00153 protected:
00155 FloatVarImpBase(Gecode::Space& home, bool share, FloatVarImpBase& x);
00156 public:
00158 FloatVarImpBase(void);
00160 FloatVarImpBase(Gecode::Space& home);
00162
00163
00175 void subscribe(Gecode::Space& home, Gecode::Propagator& p, Gecode::PropCond pc, bool assigned, bool schedule);
00177 void subscribe(Gecode::Space& home, Gecode::Advisor& a, bool assigned);
00179 Gecode::ModEvent notify(Gecode::Space& home, Gecode::ModEvent me, Gecode::Delta& d);
00181 };
00182 }}
00183 #endif
00184 #ifdef GECODE_HAS_INT_VARS
00185 namespace Gecode { namespace Int {
00186
00187 forceinline
00188 IntVarImpBase::IntVarImpBase(void) {}
00189
00190 forceinline
00191 IntVarImpBase::IntVarImpBase(Gecode::Space& home)
00192 : Gecode::VarImp<Gecode::Int::IntVarImpConf>(home) {}
00193
00194 forceinline
00195 IntVarImpBase::IntVarImpBase(Gecode::Space& home, bool share, IntVarImpBase& x)
00196 : Gecode::VarImp<Gecode::Int::IntVarImpConf>(home,share,x) {}
00197
00198 forceinline void
00199 IntVarImpBase::subscribe(Gecode::Space& home, Gecode::Propagator& p, Gecode::PropCond pc, bool assigned, bool schedule) {
00200 Gecode::VarImp<Gecode::Int::IntVarImpConf>::subscribe(home,p,pc,assigned,ME_INT_BND,schedule);
00201 }
00202 forceinline void
00203 IntVarImpBase::subscribe(Gecode::Space& home, Gecode::Advisor& a, bool assigned) {
00204 Gecode::VarImp<Gecode::Int::IntVarImpConf>::subscribe(home,a,assigned);
00205 }
00206
00207 forceinline Gecode::ModEvent
00208 IntVarImpBase::notify(Gecode::Space& home, Gecode::ModEvent me, Gecode::Delta& d) {
00209 switch (me) {
00210 case ME_INT_VAL:
00211
00212 schedule(home,PC_INT_VAL,PC_INT_DOM,ME_INT_VAL);
00213 if (!Gecode::VarImp<Gecode::Int::IntVarImpConf>::advise(home,ME_INT_VAL,d))
00214 return ME_INT_FAILED;
00215 cancel(home);
00216 break;
00217 case ME_INT_BND:
00218
00219 schedule(home,PC_INT_BND,PC_INT_DOM,ME_INT_BND);
00220 if (!Gecode::VarImp<Gecode::Int::IntVarImpConf>::advise(home,ME_INT_BND,d))
00221 return ME_INT_FAILED;
00222 break;
00223 case ME_INT_DOM:
00224
00225 schedule(home,PC_INT_DOM,PC_INT_DOM,ME_INT_DOM);
00226 if (!Gecode::VarImp<Gecode::Int::IntVarImpConf>::advise(home,ME_INT_DOM,d))
00227 return ME_INT_FAILED;
00228 break;
00229 default: GECODE_NEVER;
00230 }
00231 return me;
00232 }
00233
00234 }}
00235 #endif
00236 #ifdef GECODE_HAS_INT_VARS
00237 namespace Gecode { namespace Int {
00238
00239 forceinline
00240 BoolVarImpBase::BoolVarImpBase(void) {}
00241
00242 forceinline
00243 BoolVarImpBase::BoolVarImpBase(Gecode::Space& home)
00244 : Gecode::VarImp<Gecode::Int::BoolVarImpConf>(home) {}
00245
00246 forceinline
00247 BoolVarImpBase::BoolVarImpBase(Gecode::Space& home, bool share, BoolVarImpBase& x)
00248 : Gecode::VarImp<Gecode::Int::BoolVarImpConf>(home,share,x) {}
00249
00250 forceinline void
00251 BoolVarImpBase::subscribe(Gecode::Space& home, Gecode::Propagator& p, Gecode::PropCond pc, bool assigned, bool schedule) {
00252 Gecode::VarImp<Gecode::Int::BoolVarImpConf>::subscribe(home,p,pc,assigned,ME_BOOL_VAL,schedule);
00253 }
00254 forceinline void
00255 BoolVarImpBase::subscribe(Gecode::Space& home, Gecode::Advisor& a, bool assigned) {
00256 Gecode::VarImp<Gecode::Int::BoolVarImpConf>::subscribe(home,a,assigned);
00257 }
00258
00259 forceinline Gecode::ModEvent
00260 BoolVarImpBase::notify(Gecode::Space& home, Gecode::ModEvent, Gecode::Delta& d) {
00261 schedule(home,PC_BOOL_VAL,PC_BOOL_VAL,ME_BOOL_VAL);
00262 if (!Gecode::VarImp<Gecode::Int::BoolVarImpConf>::advise(home,ME_BOOL_VAL,d))
00263 return ME_BOOL_FAILED;
00264 cancel(home);
00265 return ME_BOOL_VAL;
00266 }
00267
00268 }}
00269 #endif
00270 #ifdef GECODE_HAS_SET_VARS
00271 namespace Gecode { namespace Set {
00272
00273 forceinline
00274 SetVarImpBase::SetVarImpBase(void) {}
00275
00276 forceinline
00277 SetVarImpBase::SetVarImpBase(Gecode::Space& home)
00278 : Gecode::VarImp<Gecode::Set::SetVarImpConf>(home) {}
00279
00280 forceinline
00281 SetVarImpBase::SetVarImpBase(Gecode::Space& home, bool share, SetVarImpBase& x)
00282 : Gecode::VarImp<Gecode::Set::SetVarImpConf>(home,share,x) {}
00283
00284 forceinline void
00285 SetVarImpBase::subscribe(Gecode::Space& home, Gecode::Propagator& p, Gecode::PropCond pc, bool assigned, bool schedule) {
00286 Gecode::VarImp<Gecode::Set::SetVarImpConf>::subscribe(home,p,pc,assigned,ME_SET_CBB,schedule);
00287 }
00288 forceinline void
00289 SetVarImpBase::subscribe(Gecode::Space& home, Gecode::Advisor& a, bool assigned) {
00290 Gecode::VarImp<Gecode::Set::SetVarImpConf>::subscribe(home,a,assigned);
00291 }
00292
00293 forceinline Gecode::ModEvent
00294 SetVarImpBase::notify(Gecode::Space& home, Gecode::ModEvent me, Gecode::Delta& d) {
00295 switch (me) {
00296 case ME_SET_VAL:
00297
00298 schedule(home,PC_SET_VAL,PC_SET_ANY,ME_SET_VAL);
00299 if (!Gecode::VarImp<Gecode::Set::SetVarImpConf>::advise(home,ME_SET_VAL,d))
00300 return ME_SET_FAILED;
00301 cancel(home);
00302 break;
00303 case ME_SET_CARD:
00304
00305 schedule(home,PC_SET_CARD,PC_SET_ANY,ME_SET_CARD);
00306 if (!Gecode::VarImp<Gecode::Set::SetVarImpConf>::advise(home,ME_SET_CARD,d))
00307 return ME_SET_FAILED;
00308 break;
00309 case ME_SET_LUB:
00310
00311 schedule(home,PC_SET_CLUB,PC_SET_CLUB,ME_SET_LUB);
00312 schedule(home,PC_SET_ANY,PC_SET_ANY,ME_SET_LUB);
00313 if (!Gecode::VarImp<Gecode::Set::SetVarImpConf>::advise(home,ME_SET_LUB,d))
00314 return ME_SET_FAILED;
00315 break;
00316 case ME_SET_GLB:
00317
00318 schedule(home,PC_SET_CGLB,PC_SET_ANY,ME_SET_GLB);
00319 if (!Gecode::VarImp<Gecode::Set::SetVarImpConf>::advise(home,ME_SET_GLB,d))
00320 return ME_SET_FAILED;
00321 break;
00322 case ME_SET_BB:
00323
00324 schedule(home,PC_SET_CLUB,PC_SET_ANY,ME_SET_BB);
00325 if (!Gecode::VarImp<Gecode::Set::SetVarImpConf>::advise(home,ME_SET_BB,d))
00326 return ME_SET_FAILED;
00327 break;
00328 case ME_SET_CLUB:
00329
00330 schedule(home,PC_SET_CARD,PC_SET_ANY,ME_SET_CLUB);
00331 if (!Gecode::VarImp<Gecode::Set::SetVarImpConf>::advise(home,ME_SET_CLUB,d))
00332 return ME_SET_FAILED;
00333 break;
00334 case ME_SET_CGLB:
00335
00336 schedule(home,PC_SET_CARD,PC_SET_ANY,ME_SET_CGLB);
00337 if (!Gecode::VarImp<Gecode::Set::SetVarImpConf>::advise(home,ME_SET_CGLB,d))
00338 return ME_SET_FAILED;
00339 break;
00340 case ME_SET_CBB:
00341
00342 schedule(home,PC_SET_CARD,PC_SET_ANY,ME_SET_CBB);
00343 if (!Gecode::VarImp<Gecode::Set::SetVarImpConf>::advise(home,ME_SET_CBB,d))
00344 return ME_SET_FAILED;
00345 break;
00346 default: GECODE_NEVER;
00347 }
00348 return me;
00349 }
00350
00351 }}
00352 #endif
00353 #ifdef GECODE_HAS_FLOAT_VARS
00354 namespace Gecode { namespace Float {
00355
00356 forceinline
00357 FloatVarImpBase::FloatVarImpBase(void) {}
00358
00359 forceinline
00360 FloatVarImpBase::FloatVarImpBase(Gecode::Space& home)
00361 : Gecode::VarImp<Gecode::Float::FloatVarImpConf>(home) {}
00362
00363 forceinline
00364 FloatVarImpBase::FloatVarImpBase(Gecode::Space& home, bool share, FloatVarImpBase& x)
00365 : Gecode::VarImp<Gecode::Float::FloatVarImpConf>(home,share,x) {}
00366
00367 forceinline void
00368 FloatVarImpBase::subscribe(Gecode::Space& home, Gecode::Propagator& p, Gecode::PropCond pc, bool assigned, bool schedule) {
00369 Gecode::VarImp<Gecode::Float::FloatVarImpConf>::subscribe(home,p,pc,assigned,ME_FLOAT_BND,schedule);
00370 }
00371 forceinline void
00372 FloatVarImpBase::subscribe(Gecode::Space& home, Gecode::Advisor& a, bool assigned) {
00373 Gecode::VarImp<Gecode::Float::FloatVarImpConf>::subscribe(home,a,assigned);
00374 }
00375
00376 forceinline Gecode::ModEvent
00377 FloatVarImpBase::notify(Gecode::Space& home, Gecode::ModEvent me, Gecode::Delta& d) {
00378 switch (me) {
00379 case ME_FLOAT_VAL:
00380
00381 schedule(home,PC_FLOAT_VAL,PC_FLOAT_BND,ME_FLOAT_VAL);
00382 if (!Gecode::VarImp<Gecode::Float::FloatVarImpConf>::advise(home,ME_FLOAT_VAL,d))
00383 return ME_FLOAT_FAILED;
00384 cancel(home);
00385 break;
00386 case ME_FLOAT_BND:
00387
00388 schedule(home,PC_FLOAT_BND,PC_FLOAT_BND,ME_FLOAT_BND);
00389 if (!Gecode::VarImp<Gecode::Float::FloatVarImpConf>::advise(home,ME_FLOAT_BND,d))
00390 return ME_FLOAT_FAILED;
00391 break;
00392 default: GECODE_NEVER;
00393 }
00394 return me;
00395 }
00396
00397 }}
00398 #endif
00399 namespace Gecode {
00400
00401 forceinline void
00402 Space::update(ActorLink** sub) {
00403 #ifdef GECODE_HAS_INT_VARS
00404 Gecode::VarImp<Gecode::Int::IntVarImpConf>::update(*this,sub);
00405 #endif
00406 #ifdef GECODE_HAS_INT_VARS
00407 Gecode::VarImp<Gecode::Int::BoolVarImpConf>::update(*this,sub);
00408 #endif
00409 #ifdef GECODE_HAS_SET_VARS
00410 Gecode::VarImp<Gecode::Set::SetVarImpConf>::update(*this,sub);
00411 #endif
00412 #ifdef GECODE_HAS_FLOAT_VARS
00413 Gecode::VarImp<Gecode::Float::FloatVarImpConf>::update(*this,sub);
00414 #endif
00415 }
00416 }
00417