Generated on Tue Apr 18 10:21:37 2017 for Gecode by doxygen 1.6.3

var.hpp

Go to the documentation of this file.
00001 /* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
00002 /*
00003  *  Main authors:
00004  *     Christian Schulte <schulte@gecode.org>
00005  *
00006  *  Copyright:
00007  *     Christian Schulte, 2012
00008  *
00009  *  Last modified:
00010  *     $Date: 2017-03-08 11:58:56 +0100 (Wed, 08 Mar 2017) $ by $Author: schulte $
00011  *     $Revision: 15562 $
00012  *
00013  *  This file is part of Gecode, the generic constraint
00014  *  development environment:
00015  *     http://www.gecode.org
00016  *
00017  *  Permission is hereby granted, free of charge, to any person obtaining
00018  *  a copy of this software and associated documentation files (the
00019  *  "Software"), to deal in the Software without restriction, including
00020  *  without limitation the rights to use, copy, modify, merge, publish,
00021  *  distribute, sublicense, and/or sell copies of the Software, and to
00022  *  permit persons to whom the Software is furnished to do so, subject to
00023  *  the following conditions:
00024  *
00025  *  The above copyright notice and this permission notice shall be
00026  *  included in all copies or substantial portions of the Software.
00027  *
00028  *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
00029  *  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
00030  *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
00031  *  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
00032  *  LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
00033  *  OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
00034  *  WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
00035  *
00036  */
00037 
00038 namespace Gecode {
00039 
00040   forceinline
00041   IntVarBranch::IntVarBranch(void)
00042     : s(SEL_NONE) {}
00043 
00044   forceinline
00045   IntVarBranch::IntVarBranch(Select s0, BranchTbl t)
00046     : VarBranch<IntVar>(t), s(s0) {}
00047 
00048   forceinline
00049   IntVarBranch::IntVarBranch(Rnd r)
00050     : VarBranch<IntVar>(r), s(SEL_RND) {}
00051 
00052   forceinline
00053   IntVarBranch::IntVarBranch(Select s0, double d, BranchTbl t)
00054     : VarBranch<IntVar>(d,t), s(s0) {}
00055 
00056   forceinline
00057   IntVarBranch::IntVarBranch(Select s0, IntAFC a, BranchTbl t)
00058     : VarBranch<IntVar>(a,t), s(s0) {}
00059 
00060   forceinline
00061   IntVarBranch::IntVarBranch(Select s0, IntAction a, BranchTbl t)
00062     : VarBranch<IntVar>(a,t), s(s0) {}
00063 
00064   forceinline
00065   IntVarBranch::IntVarBranch(Select s0, IntCHB c, BranchTbl t)
00066     : VarBranch<IntVar>(c,t), s(s0) {}
00067 
00068   forceinline
00069   IntVarBranch::IntVarBranch(Select s0, IntBranchMerit mf, BranchTbl t)
00070     : VarBranch<IntVar>(mf,t), s(s0) {}
00071 
00072   forceinline IntVarBranch::Select
00073   IntVarBranch::select(void) const {
00074     return s;
00075   }
00076 
00077   forceinline void
00078   IntVarBranch::expand(Home home, const IntVarArgs& x) {
00079     switch (select()) {
00080     case SEL_AFC_MIN: case SEL_AFC_MAX:
00081     case SEL_AFC_SIZE_MIN: case SEL_AFC_SIZE_MAX:
00082       if (!_afc)
00083         _afc = IntAFC(home,x,decay());
00084       break;
00085     case SEL_ACTION_MIN: case SEL_ACTION_MAX:
00086     case SEL_ACTION_SIZE_MIN: case SEL_ACTION_SIZE_MAX:
00087       if (!_act)
00088         _act = IntAction(home,x,decay());
00089       break;
00090     case SEL_CHB_MIN: case SEL_CHB_MAX:
00091     case SEL_CHB_SIZE_MIN: case SEL_CHB_SIZE_MAX:
00092       if (!_chb)
00093         _chb = IntCHB(home,x);
00094       break;
00095     default: ;
00096     }
00097   }
00098 
00099   inline IntVarBranch
00100   INT_VAR_NONE(void) {
00101     return IntVarBranch(IntVarBranch::SEL_NONE,nullptr);
00102   }
00103 
00104   inline IntVarBranch
00105   INT_VAR_RND(Rnd r) {
00106     return IntVarBranch(r);
00107   }
00108 
00109   inline IntVarBranch
00110   INT_VAR_MERIT_MIN(IntBranchMerit bm, BranchTbl tbl) {
00111     return IntVarBranch(IntVarBranch::SEL_MERIT_MIN,bm,tbl);
00112   }
00113 
00114   inline IntVarBranch
00115   INT_VAR_MERIT_MAX(IntBranchMerit bm, BranchTbl tbl) {
00116     return IntVarBranch(IntVarBranch::SEL_MERIT_MAX,bm,tbl);
00117   }
00118 
00119   inline IntVarBranch
00120   INT_VAR_DEGREE_MIN(BranchTbl tbl) {
00121     return IntVarBranch(IntVarBranch::SEL_DEGREE_MIN,tbl);
00122   }
00123 
00124   inline IntVarBranch
00125   INT_VAR_DEGREE_MAX(BranchTbl tbl) {
00126     return IntVarBranch(IntVarBranch::SEL_DEGREE_MAX,tbl);
00127   }
00128 
00129   inline IntVarBranch
00130   INT_VAR_AFC_MIN(double d, BranchTbl tbl) {
00131     return IntVarBranch(IntVarBranch::SEL_AFC_MIN,d,tbl);
00132   }
00133 
00134   inline IntVarBranch
00135   INT_VAR_AFC_MIN(IntAFC a, BranchTbl tbl) {
00136     return IntVarBranch(IntVarBranch::SEL_AFC_MIN,a,tbl);
00137   }
00138 
00139   inline IntVarBranch
00140   INT_VAR_AFC_MAX(double d, BranchTbl tbl) {
00141     return IntVarBranch(IntVarBranch::SEL_AFC_MAX,d,tbl);
00142   }
00143 
00144   inline IntVarBranch
00145   INT_VAR_AFC_MAX(IntAFC a, BranchTbl tbl) {
00146     return IntVarBranch(IntVarBranch::SEL_AFC_MAX,a,tbl);
00147   }
00148 
00149   inline IntVarBranch
00150   INT_VAR_ACTION_MIN(double d, BranchTbl tbl) {
00151     return IntVarBranch(IntVarBranch::SEL_ACTION_MIN,d,tbl);
00152   }
00153 
00154   inline IntVarBranch
00155   INT_VAR_ACTION_MIN(IntAction a, BranchTbl tbl) {
00156     return IntVarBranch(IntVarBranch::SEL_ACTION_MIN,a,tbl);
00157   }
00158 
00159   inline IntVarBranch
00160   INT_VAR_ACTION_MAX(double d, BranchTbl tbl) {
00161     return IntVarBranch(IntVarBranch::SEL_ACTION_MAX,d,tbl);
00162   }
00163 
00164   inline IntVarBranch
00165   INT_VAR_ACTION_MAX(IntAction a, BranchTbl tbl) {
00166     return IntVarBranch(IntVarBranch::SEL_ACTION_MAX,a,tbl);
00167   }
00168 
00169   inline IntVarBranch
00170   INT_VAR_CHB_MIN(IntCHB c, BranchTbl tbl) {
00171     return IntVarBranch(IntVarBranch::SEL_CHB_MIN,c,tbl);
00172   }
00173 
00174   inline IntVarBranch
00175   INT_VAR_CHB_MIN(BranchTbl tbl) {
00176     return IntVarBranch(IntVarBranch::SEL_CHB_MIN,tbl);
00177   }
00178 
00179   inline IntVarBranch
00180   INT_VAR_CHB_MAX(IntCHB c, BranchTbl tbl) {
00181     return IntVarBranch(IntVarBranch::SEL_CHB_MAX,c,tbl);
00182   }
00183 
00184   inline IntVarBranch
00185   INT_VAR_CHB_MAX(BranchTbl tbl) {
00186     return IntVarBranch(IntVarBranch::SEL_CHB_MAX,tbl);
00187   }
00188 
00189   inline IntVarBranch
00190   INT_VAR_MIN_MIN(BranchTbl tbl) {
00191     return IntVarBranch(IntVarBranch::SEL_MIN_MIN,tbl);
00192   }
00193 
00194   inline IntVarBranch
00195   INT_VAR_MIN_MAX(BranchTbl tbl) {
00196     return IntVarBranch(IntVarBranch::SEL_MIN_MAX,tbl);
00197   }
00198 
00199   inline IntVarBranch
00200   INT_VAR_MAX_MIN(BranchTbl tbl) {
00201     return IntVarBranch(IntVarBranch::SEL_MAX_MIN,tbl);
00202   }
00203 
00204   inline IntVarBranch
00205   INT_VAR_MAX_MAX(BranchTbl tbl) {
00206     return IntVarBranch(IntVarBranch::SEL_MAX_MAX,tbl);
00207   }
00208 
00209   inline IntVarBranch
00210   INT_VAR_SIZE_MIN(BranchTbl tbl) {
00211     return IntVarBranch(IntVarBranch::SEL_SIZE_MIN,tbl);
00212   }
00213 
00214   inline IntVarBranch
00215   INT_VAR_SIZE_MAX(BranchTbl tbl) {
00216     return IntVarBranch(IntVarBranch::SEL_SIZE_MAX,tbl);
00217   }
00218 
00219   inline IntVarBranch
00220   INT_VAR_DEGREE_SIZE_MIN(BranchTbl tbl) {
00221     return IntVarBranch(IntVarBranch::SEL_DEGREE_SIZE_MIN,tbl);
00222   }
00223 
00224   inline IntVarBranch
00225   INT_VAR_DEGREE_SIZE_MAX(BranchTbl tbl) {
00226     return IntVarBranch(IntVarBranch::SEL_DEGREE_SIZE_MAX,tbl);
00227   }
00228 
00229   inline IntVarBranch
00230   INT_VAR_AFC_SIZE_MIN(double d, BranchTbl tbl) {
00231     return IntVarBranch(IntVarBranch::SEL_AFC_SIZE_MIN,d,tbl);
00232   }
00233 
00234   inline IntVarBranch
00235   INT_VAR_AFC_SIZE_MIN(IntAFC a, BranchTbl tbl) {
00236     return IntVarBranch(IntVarBranch::SEL_AFC_SIZE_MIN,a,tbl);
00237   }
00238 
00239   inline IntVarBranch
00240   INT_VAR_AFC_SIZE_MAX(double d, BranchTbl tbl) {
00241     return IntVarBranch(IntVarBranch::SEL_AFC_SIZE_MAX,d,tbl);
00242   }
00243 
00244   inline IntVarBranch
00245   INT_VAR_AFC_SIZE_MAX(IntAFC a, BranchTbl tbl) {
00246     return IntVarBranch(IntVarBranch::SEL_AFC_SIZE_MAX,a,tbl);
00247   }
00248 
00249   inline IntVarBranch
00250   INT_VAR_ACTION_SIZE_MIN(double d, BranchTbl tbl) {
00251     return IntVarBranch(IntVarBranch::SEL_ACTION_SIZE_MIN,d,tbl);
00252   }
00253 
00254   inline IntVarBranch
00255   INT_VAR_ACTION_SIZE_MIN(IntAction a, BranchTbl tbl) {
00256     return IntVarBranch(IntVarBranch::SEL_ACTION_SIZE_MIN,a,tbl);
00257   }
00258 
00259   inline IntVarBranch
00260   INT_VAR_ACTION_SIZE_MAX(double d, BranchTbl tbl) {
00261     return IntVarBranch(IntVarBranch::SEL_ACTION_SIZE_MAX,d,tbl);
00262   }
00263 
00264   inline IntVarBranch
00265   INT_VAR_ACTION_SIZE_MAX(IntAction a, BranchTbl tbl) {
00266     return IntVarBranch(IntVarBranch::SEL_ACTION_SIZE_MAX,a,tbl);
00267   }
00268 
00269   inline IntVarBranch
00270   INT_VAR_CHB_SIZE_MIN(IntCHB c, BranchTbl tbl) {
00271     return IntVarBranch(IntVarBranch::SEL_CHB_SIZE_MIN,c,tbl);
00272   }
00273 
00274   inline IntVarBranch
00275   INT_VAR_CHB_SIZE_MIN(BranchTbl tbl) {
00276     return IntVarBranch(IntVarBranch::SEL_CHB_SIZE_MIN,tbl);
00277   }
00278 
00279   inline IntVarBranch
00280   INT_VAR_CHB_SIZE_MAX(IntCHB c, BranchTbl tbl) {
00281     return IntVarBranch(IntVarBranch::SEL_CHB_SIZE_MAX,c,tbl);
00282   }
00283 
00284   inline IntVarBranch
00285   INT_VAR_CHB_SIZE_MAX(BranchTbl tbl) {
00286     return IntVarBranch(IntVarBranch::SEL_CHB_SIZE_MAX,tbl);
00287   }
00288 
00289   inline IntVarBranch
00290   INT_VAR_REGRET_MIN_MIN(BranchTbl tbl) {
00291     return IntVarBranch(IntVarBranch::SEL_REGRET_MIN_MIN,tbl);
00292   }
00293 
00294   inline IntVarBranch
00295   INT_VAR_REGRET_MIN_MAX(BranchTbl tbl) {
00296     return IntVarBranch(IntVarBranch::SEL_REGRET_MIN_MAX,tbl);
00297   }
00298 
00299   inline IntVarBranch
00300   INT_VAR_REGRET_MAX_MIN(BranchTbl tbl) {
00301     return IntVarBranch(IntVarBranch::SEL_REGRET_MAX_MIN,tbl);
00302   }
00303 
00304   inline IntVarBranch
00305   INT_VAR_REGRET_MAX_MAX(BranchTbl tbl) {
00306     return IntVarBranch(IntVarBranch::SEL_REGRET_MAX_MAX,tbl);
00307   }
00308 
00309 
00310 
00311   forceinline
00312   BoolVarBranch::BoolVarBranch(void)
00313     : s(SEL_NONE) {}
00314 
00315   forceinline
00316   BoolVarBranch::BoolVarBranch(Select s0, BranchTbl t)
00317     : VarBranch<BoolVar>(t), s(s0) {}
00318 
00319   forceinline
00320   BoolVarBranch::BoolVarBranch(Rnd r)
00321     : VarBranch<BoolVar>(r), s(SEL_RND) {}
00322 
00323   forceinline
00324   BoolVarBranch::BoolVarBranch(Select s0, double d, BranchTbl t)
00325     : VarBranch<BoolVar>(d,t), s(s0) {}
00326 
00327   forceinline
00328   BoolVarBranch::BoolVarBranch(Select s0, BoolAFC a, BranchTbl t)
00329     : VarBranch<BoolVar>(a,t), s(s0) {}
00330 
00331   forceinline
00332   BoolVarBranch::BoolVarBranch(Select s0, BoolAction a, BranchTbl t)
00333     : VarBranch<BoolVar>(a,t), s(s0) {}
00334 
00335   forceinline
00336   BoolVarBranch::BoolVarBranch(Select s0, BoolCHB c, BranchTbl t)
00337     : VarBranch<BoolVar>(c,t), s(s0) {}
00338 
00339   forceinline
00340   BoolVarBranch::BoolVarBranch(Select s0, BoolBranchMerit mf, BranchTbl t)
00341     : VarBranch<BoolVar>(mf,t), s(s0) {}
00342 
00343   forceinline BoolVarBranch::Select
00344   BoolVarBranch::select(void) const {
00345     return s;
00346   }
00347 
00348   forceinline void
00349   BoolVarBranch::expand(Home home, const BoolVarArgs& x) {
00350     switch (select()) {
00351     case SEL_AFC_MIN: case SEL_AFC_MAX:
00352       if (!_afc)
00353         _afc = BoolAFC(home,x,decay());
00354       break;
00355     case SEL_ACTION_MIN: case SEL_ACTION_MAX:
00356       if (!_act)
00357         _act = BoolAction(home,x,decay());
00358       break;
00359     case SEL_CHB_MIN: case SEL_CHB_MAX:
00360       if (!_chb)
00361         _chb = BoolCHB(home,x);
00362       break;
00363     default: ;
00364     }
00365   }
00366 
00367   inline BoolVarBranch
00368   BOOL_VAR_NONE(void) {
00369     return BoolVarBranch(BoolVarBranch::SEL_NONE,nullptr);
00370   }
00371 
00372   inline BoolVarBranch
00373   BOOL_VAR_RND(Rnd r) {
00374     return BoolVarBranch(r);
00375   }
00376 
00377   inline BoolVarBranch
00378   BOOL_VAR_MERIT_MIN(BoolBranchMerit bm, BranchTbl tbl) {
00379     return BoolVarBranch(BoolVarBranch::SEL_MERIT_MIN,bm,tbl);
00380   }
00381 
00382   inline BoolVarBranch
00383   BOOL_VAR_MERIT_MAX(BoolBranchMerit bm, BranchTbl tbl) {
00384     return BoolVarBranch(BoolVarBranch::SEL_MERIT_MAX,bm,tbl);
00385   }
00386 
00387   inline BoolVarBranch
00388   BOOL_VAR_DEGREE_MIN(BranchTbl tbl) {
00389     return BoolVarBranch(BoolVarBranch::SEL_DEGREE_MIN,tbl);
00390   }
00391 
00392   inline BoolVarBranch
00393   BOOL_VAR_DEGREE_MAX(BranchTbl tbl) {
00394     return BoolVarBranch(BoolVarBranch::SEL_DEGREE_MAX,tbl);
00395   }
00396 
00397   inline BoolVarBranch
00398   BOOL_VAR_AFC_MIN(double d, BranchTbl tbl) {
00399     return BoolVarBranch(BoolVarBranch::SEL_AFC_MIN,d,tbl);
00400   }
00401 
00402   inline BoolVarBranch
00403   BOOL_VAR_AFC_MIN(BoolAFC a, BranchTbl tbl) {
00404     return BoolVarBranch(BoolVarBranch::SEL_AFC_MIN,a,tbl);
00405   }
00406 
00407   inline BoolVarBranch
00408   BOOL_VAR_AFC_MAX(double d, BranchTbl tbl) {
00409     return BoolVarBranch(BoolVarBranch::SEL_AFC_MAX,d,tbl);
00410   }
00411 
00412   inline BoolVarBranch
00413   BOOL_VAR_AFC_MAX(BoolAFC a, BranchTbl tbl) {
00414     return BoolVarBranch(BoolVarBranch::SEL_AFC_MAX,a,tbl);
00415   }
00416 
00417   inline BoolVarBranch
00418   BOOL_VAR_ACTION_MIN(double d, BranchTbl tbl) {
00419     return BoolVarBranch(BoolVarBranch::SEL_ACTION_MIN,d,tbl);
00420   }
00421 
00422   inline BoolVarBranch
00423   BOOL_VAR_ACTION_MIN(BoolAction a, BranchTbl tbl) {
00424     return BoolVarBranch(BoolVarBranch::SEL_ACTION_MIN,a,tbl);
00425   }
00426 
00427   inline BoolVarBranch
00428   BOOL_VAR_ACTION_MAX(double d, BranchTbl tbl) {
00429     return BoolVarBranch(BoolVarBranch::SEL_ACTION_MAX,d,tbl);
00430   }
00431 
00432   inline BoolVarBranch
00433   BOOL_VAR_ACTION_MAX(BoolAction a, BranchTbl tbl) {
00434     return BoolVarBranch(BoolVarBranch::SEL_ACTION_MAX,a,tbl);
00435   }
00436 
00437   inline BoolVarBranch
00438   BOOL_VAR_CHB_MIN(BoolCHB c, BranchTbl tbl) {
00439     return BoolVarBranch(BoolVarBranch::SEL_CHB_MIN,c,tbl);
00440   }
00441 
00442   inline BoolVarBranch
00443   BOOL_VAR_CHB_MIN(BranchTbl tbl) {
00444     return BoolVarBranch(BoolVarBranch::SEL_CHB_MIN,tbl);
00445   }
00446 
00447   inline BoolVarBranch
00448   BOOL_VAR_CHB_MAX(BoolCHB c, BranchTbl tbl) {
00449     return BoolVarBranch(BoolVarBranch::SEL_CHB_MAX,tbl);
00450   }
00451 
00452   inline BoolVarBranch
00453   BOOL_VAR_CHB_MAX(BranchTbl tbl) {
00454     return BoolVarBranch(BoolVarBranch::SEL_CHB_MAX,tbl);
00455   }
00456 
00457 }
00458 
00459 // STATISTICS: int-branch