Generated on Mon Aug 25 11:35:34 2008 for Gecode by doxygen 1.5.6

var-imp.icc

Go to the documentation of this file.
00001 /*
00002  *  CAUTION:
00003  *    This file has been automatically generated. Do not edit,
00004  *    edit the specification file "variable.vsl" and the following
00005  *    files instead:
00006  *     - gecode/int/var-imp/int.vis
00007  *     - gecode/int/var-imp/bool.vis
00008  *     - gecode/set/var-imp/set.vis
00009  *     - gecode/cpltset/var-imp/cpltset.vis
00010  *
00011  *  This file contains generated code fragments which are
00012  *  copyrighted as follows:
00013  *
00014  *  Main author:
00015  *     Christian Schulte <schulte@gecode.org>
00016  *
00017  *  Copyright:
00018  *     Christian Schulte, 2007
00019  *
00020  *  The generated code fragments are part of Gecode, the generic
00021  *  constraint development environment:
00022  *     http://www.gecode.org
00023  *
00024  *  Permission is hereby granted, free of charge, to any person obtaining
00025  *  a copy of this software and associated documentation files (the
00026  *  "Software"), to deal in the Software without restriction, including
00027  *  without limitation the rights to use, copy, modify, merge, publish,
00028  *  distribute, sublicense, and/or sell copies of the Software, and to
00029  *  permit persons to whom the Software is furnished to do so, subject to
00030  *  the following conditions:
00031  *
00032  *  The above copyright notice and this permission notice shall be
00033  *  included in all copies or substantial portions of the Software.
00034  *
00035  *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
00036  *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
00037  *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
00038  *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
00039  *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
00040  *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
00041  *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
00042  *
00043  */
00044 
00045 #ifdef GECODE_HAS_INT_VARS
00046 namespace Gecode { namespace Int { 
00048   class IntVarImpBase : public Gecode::VarImp<Gecode::Int::IntVarImpConf> {
00049   protected:
00051     IntVarImpBase(Gecode::Space* home, bool share, IntVarImpBase& x);
00052   public:
00054     IntVarImpBase(void);
00056     IntVarImpBase(Gecode::Space* home);
00058 
00059 
00071     void subscribe(Gecode::Space* home, Gecode::Propagator* p, Gecode::PropCond pc, bool assigned, bool schedule);
00073     void subscribe(Gecode::Space* home, Gecode::Advisor* a, bool assigned);
00075     Gecode::ModEvent notify(Gecode::Space* home, Gecode::ModEvent me, Gecode::Delta* d);
00077   };
00078 }}
00079 #endif
00080 #ifdef GECODE_HAS_INT_VARS
00081 namespace Gecode { namespace Int { 
00083   class BoolVarImpBase : public Gecode::VarImp<Gecode::Int::BoolVarImpConf> {
00084   protected:
00086     BoolVarImpBase(Gecode::Space* home, bool share, BoolVarImpBase& x);
00087   public:
00089     BoolVarImpBase(void);
00091     BoolVarImpBase(Gecode::Space* home);
00093 
00094 
00106     void subscribe(Gecode::Space* home, Gecode::Propagator* p, Gecode::PropCond pc, bool assigned, bool schedule);
00108     void subscribe(Gecode::Space* home, Gecode::Advisor* a, bool assigned);
00110     Gecode::ModEvent notify(Gecode::Space* home, Gecode::ModEvent me, Gecode::Delta* d);
00112   };
00113 }}
00114 #endif
00115 #ifdef GECODE_HAS_SET_VARS
00116 namespace Gecode { namespace Set { 
00118   class SetVarImpBase : public Gecode::VarImp<Gecode::Set::SetVarImpConf> {
00119   protected:
00121     SetVarImpBase(Gecode::Space* home, bool share, SetVarImpBase& x);
00122   public:
00124     SetVarImpBase(void);
00126     SetVarImpBase(Gecode::Space* home);
00128 
00129 
00141     void subscribe(Gecode::Space* home, Gecode::Propagator* p, Gecode::PropCond pc, bool assigned, bool schedule);
00143     void subscribe(Gecode::Space* home, Gecode::Advisor* a, bool assigned);
00145     Gecode::ModEvent notify(Gecode::Space* home, Gecode::ModEvent me, Gecode::Delta* d);
00147   };
00148 }}
00149 #endif
00150 #ifdef GECODE_HAS_CPLTSET_VARS
00151 namespace Gecode { namespace CpltSet { 
00153   class CpltSetVarImpBase : public Gecode::VarImp<Gecode::CpltSet::CpltSetVarImpConf> {
00154   private:
00156     CpltSetVarImpBase* _next_d;
00157   protected:
00159     CpltSetVarImpBase(Gecode::Space* home, bool share, CpltSetVarImpBase& x);
00160   public:
00162     CpltSetVarImpBase(void);
00164     CpltSetVarImpBase(Gecode::Space* home);
00166 
00167 
00179     void subscribe(Gecode::Space* home, Gecode::Propagator* p, Gecode::PropCond pc, bool assigned, bool schedule);
00181     void subscribe(Gecode::Space* home, Gecode::Advisor* a, bool assigned);
00183     Gecode::ModEvent notify(Gecode::Space* home, Gecode::ModEvent me, Gecode::Delta* d);
00185 
00186     CpltSetVarImpBase* next_d(void) const;
00187   };
00188 }}
00189 #endif
00190 #ifdef GECODE_HAS_INT_VARS
00191 namespace Gecode { namespace Int { 
00192 
00193   forceinline
00194   IntVarImpBase::IntVarImpBase(void) {}
00195 
00196   forceinline
00197   IntVarImpBase::IntVarImpBase(Gecode::Space* home)
00198     : Gecode::VarImp<Gecode::Int::IntVarImpConf>(home) {}
00199 
00200   forceinline
00201   IntVarImpBase::IntVarImpBase(Gecode::Space* home, bool share, IntVarImpBase& x)
00202     : Gecode::VarImp<Gecode::Int::IntVarImpConf>(home,share,x) {}
00203 
00204   forceinline void
00205   IntVarImpBase::subscribe(Gecode::Space* home, Gecode::Propagator* p, Gecode::PropCond pc, bool assigned, bool schedule) {
00206     Gecode::VarImp<Gecode::Int::IntVarImpConf>::subscribe(home,p,pc,assigned,ME_INT_BND,schedule);
00207   }
00208   forceinline void
00209   IntVarImpBase::subscribe(Gecode::Space* home, Gecode::Advisor* a, bool assigned) {
00210     Gecode::VarImp<Gecode::Int::IntVarImpConf>::subscribe(home,a,assigned);
00211   }
00212 
00213   forceinline Gecode::ModEvent
00214   IntVarImpBase::notify(Gecode::Space* home, Gecode::ModEvent me, Gecode::Delta* d) {
00215     switch (me) {
00216     case ME_INT_VAL:
00217       // Conditions: VAL, BND, DOM
00218       schedule(home,PC_INT_VAL,PC_INT_DOM,ME_INT_VAL);
00219       if (!Gecode::VarImp<Gecode::Int::IntVarImpConf>::advise(home,ME_INT_VAL,d))
00220         return ME_INT_FAILED;
00221       cancel(home);
00222       break;
00223     case ME_INT_BND:
00224       // Conditions: BND, DOM
00225       schedule(home,PC_INT_BND,PC_INT_DOM,ME_INT_BND);
00226       if (!Gecode::VarImp<Gecode::Int::IntVarImpConf>::advise(home,ME_INT_BND,d))
00227         return ME_INT_FAILED;
00228       break;
00229     case ME_INT_DOM:
00230       // Conditions: DOM
00231       schedule(home,PC_INT_DOM,PC_INT_DOM,ME_INT_DOM);
00232       if (!Gecode::VarImp<Gecode::Int::IntVarImpConf>::advise(home,ME_INT_DOM,d))
00233         return ME_INT_FAILED;
00234       break;
00235     default: GECODE_NEVER;
00236     }
00237     return me;
00238   }
00239 
00240 }}
00241 #endif
00242 #ifdef GECODE_HAS_INT_VARS
00243 namespace Gecode { namespace Int { 
00244 
00245   forceinline
00246   BoolVarImpBase::BoolVarImpBase(void) {}
00247 
00248   forceinline
00249   BoolVarImpBase::BoolVarImpBase(Gecode::Space* home)
00250     : Gecode::VarImp<Gecode::Int::BoolVarImpConf>(home) {}
00251 
00252   forceinline
00253   BoolVarImpBase::BoolVarImpBase(Gecode::Space* home, bool share, BoolVarImpBase& x)
00254     : Gecode::VarImp<Gecode::Int::BoolVarImpConf>(home,share,x) {}
00255 
00256   forceinline void
00257   BoolVarImpBase::subscribe(Gecode::Space* home, Gecode::Propagator* p, Gecode::PropCond pc, bool assigned, bool schedule) {
00258     Gecode::VarImp<Gecode::Int::BoolVarImpConf>::subscribe(home,p,pc,assigned,ME_BOOL_VAL,schedule);
00259   }
00260   forceinline void
00261   BoolVarImpBase::subscribe(Gecode::Space* home, Gecode::Advisor* a, bool assigned) {
00262     Gecode::VarImp<Gecode::Int::BoolVarImpConf>::subscribe(home,a,assigned);
00263   }
00264 
00265   forceinline Gecode::ModEvent
00266   BoolVarImpBase::notify(Gecode::Space* home, Gecode::ModEvent, Gecode::Delta* d) {
00267     schedule(home,PC_BOOL_VAL,PC_BOOL_VAL,ME_BOOL_VAL);
00268     if (!Gecode::VarImp<Gecode::Int::BoolVarImpConf>::advise(home,ME_BOOL_VAL,d))
00269       return ME_BOOL_FAILED;
00270     cancel(home);
00271     return ME_BOOL_VAL;
00272   }
00273 
00274 }}
00275 #endif
00276 #ifdef GECODE_HAS_SET_VARS
00277 namespace Gecode { namespace Set { 
00278 
00279   forceinline
00280   SetVarImpBase::SetVarImpBase(void) {}
00281 
00282   forceinline
00283   SetVarImpBase::SetVarImpBase(Gecode::Space* home)
00284     : Gecode::VarImp<Gecode::Set::SetVarImpConf>(home) {}
00285 
00286   forceinline
00287   SetVarImpBase::SetVarImpBase(Gecode::Space* home, bool share, SetVarImpBase& x)
00288     : Gecode::VarImp<Gecode::Set::SetVarImpConf>(home,share,x) {}
00289 
00290   forceinline void
00291   SetVarImpBase::subscribe(Gecode::Space* home, Gecode::Propagator* p, Gecode::PropCond pc, bool assigned, bool schedule) {
00292     Gecode::VarImp<Gecode::Set::SetVarImpConf>::subscribe(home,p,pc,assigned,ME_SET_CBB,schedule);
00293   }
00294   forceinline void
00295   SetVarImpBase::subscribe(Gecode::Space* home, Gecode::Advisor* a, bool assigned) {
00296     Gecode::VarImp<Gecode::Set::SetVarImpConf>::subscribe(home,a,assigned);
00297   }
00298 
00299   forceinline Gecode::ModEvent
00300   SetVarImpBase::notify(Gecode::Space* home, Gecode::ModEvent me, Gecode::Delta* d) {
00301     switch (me) {
00302     case ME_SET_VAL:
00303       // Conditions: VAL, CARD, CLUB, CGLB, ANY
00304       schedule(home,PC_SET_VAL,PC_SET_ANY,ME_SET_VAL);
00305       if (!Gecode::VarImp<Gecode::Set::SetVarImpConf>::advise(home,ME_SET_VAL,d))
00306         return ME_SET_FAILED;
00307       cancel(home);
00308       break;
00309     case ME_SET_CARD:
00310       // Conditions: CARD, CLUB, CGLB, ANY
00311       schedule(home,PC_SET_CARD,PC_SET_ANY,ME_SET_CARD);
00312       if (!Gecode::VarImp<Gecode::Set::SetVarImpConf>::advise(home,ME_SET_CARD,d))
00313         return ME_SET_FAILED;
00314       break;
00315     case ME_SET_LUB:
00316       // Conditions: CLUB, ANY
00317       schedule(home,PC_SET_CLUB,PC_SET_CLUB,ME_SET_LUB);
00318       schedule(home,PC_SET_ANY,PC_SET_ANY,ME_SET_LUB);
00319       if (!Gecode::VarImp<Gecode::Set::SetVarImpConf>::advise(home,ME_SET_LUB,d))
00320         return ME_SET_FAILED;
00321       break;
00322     case ME_SET_GLB:
00323       // Conditions: CGLB, ANY
00324       schedule(home,PC_SET_CGLB,PC_SET_ANY,ME_SET_GLB);
00325       if (!Gecode::VarImp<Gecode::Set::SetVarImpConf>::advise(home,ME_SET_GLB,d))
00326         return ME_SET_FAILED;
00327       break;
00328     case ME_SET_BB:
00329       // Conditions: CLUB, CGLB, ANY
00330       schedule(home,PC_SET_CLUB,PC_SET_ANY,ME_SET_BB);
00331       if (!Gecode::VarImp<Gecode::Set::SetVarImpConf>::advise(home,ME_SET_BB,d))
00332         return ME_SET_FAILED;
00333       break;
00334     case ME_SET_CLUB:
00335       // Conditions: CARD, CLUB, CGLB, ANY
00336       schedule(home,PC_SET_CARD,PC_SET_ANY,ME_SET_CLUB);
00337       if (!Gecode::VarImp<Gecode::Set::SetVarImpConf>::advise(home,ME_SET_CLUB,d))
00338         return ME_SET_FAILED;
00339       break;
00340     case ME_SET_CGLB:
00341       // Conditions: CARD, CLUB, CGLB, ANY
00342       schedule(home,PC_SET_CARD,PC_SET_ANY,ME_SET_CGLB);
00343       if (!Gecode::VarImp<Gecode::Set::SetVarImpConf>::advise(home,ME_SET_CGLB,d))
00344         return ME_SET_FAILED;
00345       break;
00346     case ME_SET_CBB:
00347       // Conditions: CARD, CLUB, CGLB, ANY
00348       schedule(home,PC_SET_CARD,PC_SET_ANY,ME_SET_CBB);
00349       if (!Gecode::VarImp<Gecode::Set::SetVarImpConf>::advise(home,ME_SET_CBB,d))
00350         return ME_SET_FAILED;
00351       break;
00352     default: GECODE_NEVER;
00353     }
00354     return me;
00355   }
00356 
00357 }}
00358 #endif
00359 #ifdef GECODE_HAS_CPLTSET_VARS
00360 namespace Gecode { namespace CpltSet { 
00361 
00362   forceinline
00363   CpltSetVarImpBase::CpltSetVarImpBase(void) {}
00364 
00365   forceinline
00366   CpltSetVarImpBase::CpltSetVarImpBase(Gecode::Space* home)
00367     : Gecode::VarImp<Gecode::CpltSet::CpltSetVarImpConf>(home) {
00368      _next_d = static_cast<CpltSetVarImpBase*>(vars_d(home)); vars_d(home,this);
00369   }
00370 
00371   forceinline
00372   CpltSetVarImpBase::CpltSetVarImpBase(Gecode::Space* home, bool share, CpltSetVarImpBase& x)
00373     : Gecode::VarImp<Gecode::CpltSet::CpltSetVarImpConf>(home,share,x) {
00374      _next_d = static_cast<CpltSetVarImpBase*>(vars_d(home)); vars_d(home,this);
00375   }
00376 
00377   forceinline CpltSetVarImpBase*
00378   CpltSetVarImpBase::next_d(void) const {
00379     return _next_d;
00380   }
00381 
00382 
00383   forceinline void
00384   CpltSetVarImpBase::subscribe(Gecode::Space* home, Gecode::Propagator* p, Gecode::PropCond pc, bool assigned, bool schedule) {
00385     Gecode::VarImp<Gecode::CpltSet::CpltSetVarImpConf>::subscribe(home,p,pc,assigned,ME_CPLTSET_DOM,schedule);
00386   }
00387   forceinline void
00388   CpltSetVarImpBase::subscribe(Gecode::Space* home, Gecode::Advisor* a, bool assigned) {
00389     Gecode::VarImp<Gecode::CpltSet::CpltSetVarImpConf>::subscribe(home,a,assigned);
00390   }
00391 
00392   forceinline Gecode::ModEvent
00393   CpltSetVarImpBase::notify(Gecode::Space* home, Gecode::ModEvent me, Gecode::Delta* d) {
00394     switch (me) {
00395     case ME_CPLTSET_VAL:
00396       // Conditions: VAL, DOM
00397       schedule(home,PC_CPLTSET_VAL,PC_CPLTSET_DOM,ME_CPLTSET_VAL);
00398       if (!Gecode::VarImp<Gecode::CpltSet::CpltSetVarImpConf>::advise(home,ME_CPLTSET_VAL,d))
00399         return ME_CPLTSET_FAILED;
00400       cancel(home);
00401       break;
00402     case ME_CPLTSET_DOM:
00403       // Conditions: DOM
00404       schedule(home,PC_CPLTSET_DOM,PC_CPLTSET_DOM,ME_CPLTSET_DOM);
00405       if (!Gecode::VarImp<Gecode::CpltSet::CpltSetVarImpConf>::advise(home,ME_CPLTSET_DOM,d))
00406         return ME_CPLTSET_FAILED;
00407       break;
00408     default: GECODE_NEVER;
00409     }
00410     return me;
00411   }
00412 
00413 }}
00414 #endif
00415 namespace Gecode {
00416 
00417   forceinline void
00418   Space::update(ActorLink** sub) {
00419 #ifdef GECODE_HAS_INT_VARS
00420     Gecode::VarImp<Gecode::Int::IntVarImpConf>::update(this,sub);
00421 #endif
00422 #ifdef GECODE_HAS_INT_VARS
00423     Gecode::VarImp<Gecode::Int::BoolVarImpConf>::update(this,sub);
00424 #endif
00425 #ifdef GECODE_HAS_SET_VARS
00426     Gecode::VarImp<Gecode::Set::SetVarImpConf>::update(this,sub);
00427 #endif
00428 #ifdef GECODE_HAS_CPLTSET_VARS
00429     Gecode::VarImp<Gecode::CpltSet::CpltSetVarImpConf>::update(this,sub);
00430 #endif
00431   }
00432 }
00433 // STATISTICS: kernel-var