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