Generated on Fri Mar 20 15:56:01 2015 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  *     - ./gecode/float/var-imp/float.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_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       // Conditions: VAL, BND, DOM
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       // Conditions: BND, DOM
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       // Conditions: DOM
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       // Conditions: VAL, CARD, CLUB, CGLB, ANY
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       // Conditions: CARD, CLUB, CGLB, ANY
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       // Conditions: CLUB, ANY
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       // Conditions: CGLB, ANY
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       // Conditions: CLUB, CGLB, ANY
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       // Conditions: CARD, CLUB, CGLB, ANY
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       // Conditions: CARD, CLUB, CGLB, ANY
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       // Conditions: CARD, CLUB, CGLB, ANY
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       // Conditions: VAL, BND
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       // Conditions: BND
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 // STATISTICS: kernel-var