Generated on Thu Mar 22 10:39:41 2012 for Gecode by doxygen 1.6.3

var-imp.hpp

Go to the documentation of this file.
00001 /*
00002  *  CAUTION:
00003  *    This file has been automatically generated. Do not edit,
00004  *    edit the following files instead:
00005  *     - ./gecode/int/var-imp/int.vis
00006  *     - ./gecode/int/var-imp/bool.vis
00007  *     - ./gecode/set/var-imp/set.vis
00008  *
00009  *  This file contains generated code fragments which are
00010  *  copyrighted as follows:
00011  *
00012  *  Main author:
00013  *     Christian Schulte <schulte@gecode.org>
00014  *
00015  *  Copyright:
00016  *     Christian Schulte, 2007
00017  *
00018  *  The generated code fragments are part of Gecode, the generic
00019  *  constraint development environment:
00020  *     http://www.gecode.org
00021  *
00022  *  Permission is hereby granted, free of charge, to any person obtaining
00023  *  a copy of this software and associated documentation files (the
00024  *  "Software"), to deal in the Software without restriction, including
00025  *  without limitation the rights to use, copy, modify, merge, publish,
00026  *  distribute, sublicense, and/or sell copies of the Software, and to
00027  *  permit persons to whom the Software is furnished to do so, subject to
00028  *  the following conditions:
00029  *
00030  *  The above copyright notice and this permission notice shall be
00031  *  included in all copies or substantial portions of the Software.
00032  *
00033  *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
00034  *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
00035  *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
00036  *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
00037  *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
00038  *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
00039  *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
00040  *
00041  */
00042 
00043 #ifdef GECODE_HAS_INT_VARS
00044 namespace Gecode { namespace Int { 
00046   class IntVarImpBase : public Gecode::VarImp<Gecode::Int::IntVarImpConf> {
00047   protected:
00049     IntVarImpBase(Gecode::Space& home, bool share, IntVarImpBase& x);
00050   public:
00052     IntVarImpBase(void);
00054     IntVarImpBase(Gecode::Space& home);
00056 
00057 
00069     void subscribe(Gecode::Space& home, Gecode::Propagator& p, Gecode::PropCond pc, bool assigned, bool schedule);
00071     void subscribe(Gecode::Space& home, Gecode::Advisor& a, bool assigned);
00073     Gecode::ModEvent notify(Gecode::Space& home, Gecode::ModEvent me, Gecode::Delta& d);
00075   };
00076 }}
00077 #endif
00078 #ifdef GECODE_HAS_INT_VARS
00079 namespace Gecode { namespace Int { 
00081   class BoolVarImpBase : public Gecode::VarImp<Gecode::Int::BoolVarImpConf> {
00082   protected:
00084     BoolVarImpBase(Gecode::Space& home, bool share, BoolVarImpBase& x);
00085   public:
00087     BoolVarImpBase(void);
00089     BoolVarImpBase(Gecode::Space& home);
00091 
00092 
00104     void subscribe(Gecode::Space& home, Gecode::Propagator& p, Gecode::PropCond pc, bool assigned, bool schedule);
00106     void subscribe(Gecode::Space& home, Gecode::Advisor& a, bool assigned);
00108     Gecode::ModEvent notify(Gecode::Space& home, Gecode::ModEvent me, Gecode::Delta& d);
00110   };
00111 }}
00112 #endif
00113 #ifdef GECODE_HAS_SET_VARS
00114 namespace Gecode { namespace Set { 
00116   class SetVarImpBase : public Gecode::VarImp<Gecode::Set::SetVarImpConf> {
00117   protected:
00119     SetVarImpBase(Gecode::Space& home, bool share, SetVarImpBase& x);
00120   public:
00122     SetVarImpBase(void);
00124     SetVarImpBase(Gecode::Space& home);
00126 
00127 
00139     void subscribe(Gecode::Space& home, Gecode::Propagator& p, Gecode::PropCond pc, bool assigned, bool schedule);
00141     void subscribe(Gecode::Space& home, Gecode::Advisor& a, bool assigned);
00143     Gecode::ModEvent notify(Gecode::Space& home, Gecode::ModEvent me, Gecode::Delta& d);
00145   };
00146 }}
00147 #endif
00148 #ifdef GECODE_HAS_INT_VARS
00149 namespace Gecode { namespace Int { 
00150 
00151   forceinline
00152   IntVarImpBase::IntVarImpBase(void) {}
00153 
00154   forceinline
00155   IntVarImpBase::IntVarImpBase(Gecode::Space& home)
00156     : Gecode::VarImp<Gecode::Int::IntVarImpConf>(home) {}
00157 
00158   forceinline
00159   IntVarImpBase::IntVarImpBase(Gecode::Space& home, bool share, IntVarImpBase& x)
00160     : Gecode::VarImp<Gecode::Int::IntVarImpConf>(home,share,x) {}
00161 
00162   forceinline void
00163   IntVarImpBase::subscribe(Gecode::Space& home, Gecode::Propagator& p, Gecode::PropCond pc, bool assigned, bool schedule) {
00164     Gecode::VarImp<Gecode::Int::IntVarImpConf>::subscribe(home,p,pc,assigned,ME_INT_BND,schedule);
00165   }
00166   forceinline void
00167   IntVarImpBase::subscribe(Gecode::Space& home, Gecode::Advisor& a, bool assigned) {
00168     Gecode::VarImp<Gecode::Int::IntVarImpConf>::subscribe(home,a,assigned);
00169   }
00170 
00171   forceinline Gecode::ModEvent
00172   IntVarImpBase::notify(Gecode::Space& home, Gecode::ModEvent me, Gecode::Delta& d) {
00173     switch (me) {
00174     case ME_INT_VAL:
00175       // Conditions: VAL, BND, DOM
00176       schedule(home,PC_INT_VAL,PC_INT_DOM,ME_INT_VAL);
00177       if (!Gecode::VarImp<Gecode::Int::IntVarImpConf>::advise(home,ME_INT_VAL,d))
00178         return ME_INT_FAILED;
00179       cancel(home);
00180       break;
00181     case ME_INT_BND:
00182       // Conditions: BND, DOM
00183       schedule(home,PC_INT_BND,PC_INT_DOM,ME_INT_BND);
00184       if (!Gecode::VarImp<Gecode::Int::IntVarImpConf>::advise(home,ME_INT_BND,d))
00185         return ME_INT_FAILED;
00186       break;
00187     case ME_INT_DOM:
00188       // Conditions: DOM
00189       schedule(home,PC_INT_DOM,PC_INT_DOM,ME_INT_DOM);
00190       if (!Gecode::VarImp<Gecode::Int::IntVarImpConf>::advise(home,ME_INT_DOM,d))
00191         return ME_INT_FAILED;
00192       break;
00193     default: GECODE_NEVER;
00194     }
00195     return me;
00196   }
00197 
00198 }}
00199 #endif
00200 #ifdef GECODE_HAS_INT_VARS
00201 namespace Gecode { namespace Int { 
00202 
00203   forceinline
00204   BoolVarImpBase::BoolVarImpBase(void) {}
00205 
00206   forceinline
00207   BoolVarImpBase::BoolVarImpBase(Gecode::Space& home)
00208     : Gecode::VarImp<Gecode::Int::BoolVarImpConf>(home) {}
00209 
00210   forceinline
00211   BoolVarImpBase::BoolVarImpBase(Gecode::Space& home, bool share, BoolVarImpBase& x)
00212     : Gecode::VarImp<Gecode::Int::BoolVarImpConf>(home,share,x) {}
00213 
00214   forceinline void
00215   BoolVarImpBase::subscribe(Gecode::Space& home, Gecode::Propagator& p, Gecode::PropCond pc, bool assigned, bool schedule) {
00216     Gecode::VarImp<Gecode::Int::BoolVarImpConf>::subscribe(home,p,pc,assigned,ME_BOOL_VAL,schedule);
00217   }
00218   forceinline void
00219   BoolVarImpBase::subscribe(Gecode::Space& home, Gecode::Advisor& a, bool assigned) {
00220     Gecode::VarImp<Gecode::Int::BoolVarImpConf>::subscribe(home,a,assigned);
00221   }
00222 
00223   forceinline Gecode::ModEvent
00224   BoolVarImpBase::notify(Gecode::Space& home, Gecode::ModEvent, Gecode::Delta& d) {
00225     schedule(home,PC_BOOL_VAL,PC_BOOL_VAL,ME_BOOL_VAL);
00226     if (!Gecode::VarImp<Gecode::Int::BoolVarImpConf>::advise(home,ME_BOOL_VAL,d))
00227       return ME_BOOL_FAILED;
00228     cancel(home);
00229     return ME_BOOL_VAL;
00230   }
00231 
00232 }}
00233 #endif
00234 #ifdef GECODE_HAS_SET_VARS
00235 namespace Gecode { namespace Set { 
00236 
00237   forceinline
00238   SetVarImpBase::SetVarImpBase(void) {}
00239 
00240   forceinline
00241   SetVarImpBase::SetVarImpBase(Gecode::Space& home)
00242     : Gecode::VarImp<Gecode::Set::SetVarImpConf>(home) {}
00243 
00244   forceinline
00245   SetVarImpBase::SetVarImpBase(Gecode::Space& home, bool share, SetVarImpBase& x)
00246     : Gecode::VarImp<Gecode::Set::SetVarImpConf>(home,share,x) {}
00247 
00248   forceinline void
00249   SetVarImpBase::subscribe(Gecode::Space& home, Gecode::Propagator& p, Gecode::PropCond pc, bool assigned, bool schedule) {
00250     Gecode::VarImp<Gecode::Set::SetVarImpConf>::subscribe(home,p,pc,assigned,ME_SET_CBB,schedule);
00251   }
00252   forceinline void
00253   SetVarImpBase::subscribe(Gecode::Space& home, Gecode::Advisor& a, bool assigned) {
00254     Gecode::VarImp<Gecode::Set::SetVarImpConf>::subscribe(home,a,assigned);
00255   }
00256 
00257   forceinline Gecode::ModEvent
00258   SetVarImpBase::notify(Gecode::Space& home, Gecode::ModEvent me, Gecode::Delta& d) {
00259     switch (me) {
00260     case ME_SET_VAL:
00261       // Conditions: VAL, CARD, CLUB, CGLB, ANY
00262       schedule(home,PC_SET_VAL,PC_SET_ANY,ME_SET_VAL);
00263       if (!Gecode::VarImp<Gecode::Set::SetVarImpConf>::advise(home,ME_SET_VAL,d))
00264         return ME_SET_FAILED;
00265       cancel(home);
00266       break;
00267     case ME_SET_CARD:
00268       // Conditions: CARD, CLUB, CGLB, ANY
00269       schedule(home,PC_SET_CARD,PC_SET_ANY,ME_SET_CARD);
00270       if (!Gecode::VarImp<Gecode::Set::SetVarImpConf>::advise(home,ME_SET_CARD,d))
00271         return ME_SET_FAILED;
00272       break;
00273     case ME_SET_LUB:
00274       // Conditions: CLUB, ANY
00275       schedule(home,PC_SET_CLUB,PC_SET_CLUB,ME_SET_LUB);
00276       schedule(home,PC_SET_ANY,PC_SET_ANY,ME_SET_LUB);
00277       if (!Gecode::VarImp<Gecode::Set::SetVarImpConf>::advise(home,ME_SET_LUB,d))
00278         return ME_SET_FAILED;
00279       break;
00280     case ME_SET_GLB:
00281       // Conditions: CGLB, ANY
00282       schedule(home,PC_SET_CGLB,PC_SET_ANY,ME_SET_GLB);
00283       if (!Gecode::VarImp<Gecode::Set::SetVarImpConf>::advise(home,ME_SET_GLB,d))
00284         return ME_SET_FAILED;
00285       break;
00286     case ME_SET_BB:
00287       // Conditions: CLUB, CGLB, ANY
00288       schedule(home,PC_SET_CLUB,PC_SET_ANY,ME_SET_BB);
00289       if (!Gecode::VarImp<Gecode::Set::SetVarImpConf>::advise(home,ME_SET_BB,d))
00290         return ME_SET_FAILED;
00291       break;
00292     case ME_SET_CLUB:
00293       // Conditions: CARD, CLUB, CGLB, ANY
00294       schedule(home,PC_SET_CARD,PC_SET_ANY,ME_SET_CLUB);
00295       if (!Gecode::VarImp<Gecode::Set::SetVarImpConf>::advise(home,ME_SET_CLUB,d))
00296         return ME_SET_FAILED;
00297       break;
00298     case ME_SET_CGLB:
00299       // Conditions: CARD, CLUB, CGLB, ANY
00300       schedule(home,PC_SET_CARD,PC_SET_ANY,ME_SET_CGLB);
00301       if (!Gecode::VarImp<Gecode::Set::SetVarImpConf>::advise(home,ME_SET_CGLB,d))
00302         return ME_SET_FAILED;
00303       break;
00304     case ME_SET_CBB:
00305       // Conditions: CARD, CLUB, CGLB, ANY
00306       schedule(home,PC_SET_CARD,PC_SET_ANY,ME_SET_CBB);
00307       if (!Gecode::VarImp<Gecode::Set::SetVarImpConf>::advise(home,ME_SET_CBB,d))
00308         return ME_SET_FAILED;
00309       break;
00310     default: GECODE_NEVER;
00311     }
00312     return me;
00313   }
00314 
00315 }}
00316 #endif
00317 namespace Gecode {
00318 
00319   forceinline void
00320   Space::update(ActorLink** sub) {
00321 #ifdef GECODE_HAS_INT_VARS
00322     Gecode::VarImp<Gecode::Int::IntVarImpConf>::update(*this,sub);
00323 #endif
00324 #ifdef GECODE_HAS_INT_VARS
00325     Gecode::VarImp<Gecode::Int::BoolVarImpConf>::update(*this,sub);
00326 #endif
00327 #ifdef GECODE_HAS_SET_VARS
00328     Gecode::VarImp<Gecode::Set::SetVarImpConf>::update(*this,sub);
00329 #endif
00330   }
00331 }
00332 // STATISTICS: kernel-var