Generated on Mon May 10 06:46:40 2010 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 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  *
00010  *  This file contains generated code fragments which are
00011  *  copyrighted as follows:
00012  *
00013  *  Main author:
00014  *     Christian Schulte <schulte@gecode.org>
00015  *
00016  *  Copyright:
00017  *     Christian Schulte, 2007
00018  *
00019  *  The generated code fragments are part of Gecode, the generic
00020  *  constraint development environment:
00021  *     http://www.gecode.org
00022  *
00023  *  Permission is hereby granted, free of charge, to any person obtaining
00024  *  a copy of this software and associated documentation files (the
00025  *  "Software"), to deal in the Software without restriction, including
00026  *  without limitation the rights to use, copy, modify, merge, publish,
00027  *  distribute, sublicense, and/or sell copies of the Software, and to
00028  *  permit persons to whom the Software is furnished to do so, subject to
00029  *  the following conditions:
00030  *
00031  *  The above copyright notice and this permission notice shall be
00032  *  included in all copies or substantial portions of the Software.
00033  *
00034  *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
00035  *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
00036  *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
00037  *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
00038  *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
00039  *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
00040  *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
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       // Conditions: VAL, BND, DOM
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       // Conditions: BND, DOM
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       // Conditions: DOM
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       // Conditions: VAL, CARD, CLUB, CGLB, ANY
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       // Conditions: CARD, CLUB, CGLB, ANY
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       // Conditions: CLUB, ANY
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       // Conditions: CGLB, ANY
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       // Conditions: CLUB, CGLB, ANY
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       // Conditions: CARD, CLUB, CGLB, ANY
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       // Conditions: CARD, CLUB, CGLB, ANY
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       // Conditions: CARD, CLUB, CGLB, ANY
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 // STATISTICS: kernel-var