Generated on Tue Apr 18 10:21:38 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   SetVarBranch::SetVarBranch(void)
00042     : s(SEL_NONE) {}
00043 
00044   forceinline
00045   SetVarBranch::SetVarBranch(Select s0, BranchTbl t)
00046     : VarBranch<SetVar>(t), s(s0) {}
00047 
00048   forceinline
00049   SetVarBranch::SetVarBranch(Rnd r)
00050     : VarBranch<SetVar>(r), s(SEL_RND) {}
00051 
00052   forceinline
00053   SetVarBranch::SetVarBranch(Select s0, double d, BranchTbl t)
00054     : VarBranch<SetVar>(d,t), s(s0) {}
00055 
00056   forceinline
00057   SetVarBranch::SetVarBranch(Select s0, SetAFC a, BranchTbl t)
00058     : VarBranch<SetVar>(a,t), s(s0) {}
00059 
00060   forceinline
00061   SetVarBranch::SetVarBranch(Select s0, SetAction a, BranchTbl t)
00062     : VarBranch<SetVar>(a,t), s(s0) {}
00063 
00064   forceinline
00065   SetVarBranch::SetVarBranch(Select s0, SetCHB c, BranchTbl t)
00066     : VarBranch<SetVar>(c,t), s(s0) {}
00067 
00068   forceinline
00069   SetVarBranch::SetVarBranch(Select s0, SetBranchMerit mf, BranchTbl t)
00070     : VarBranch<SetVar>(mf,t), s(s0) {}
00071 
00072   forceinline SetVarBranch::Select
00073   SetVarBranch::select(void) const {
00074     return s;
00075   }
00076 
00077   forceinline void
00078   SetVarBranch::expand(Home home, const SetVarArgs& 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 = SetAFC(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 = SetAction(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 = SetCHB(home,x);
00094       break;
00095     default: ;
00096     }
00097   }
00098 
00099   inline SetVarBranch
00100   SET_VAR_NONE(void) {
00101     return SetVarBranch(SetVarBranch::SEL_NONE,nullptr);
00102   }
00103 
00104   inline SetVarBranch
00105   SET_VAR_RND(Rnd r) {
00106     return SetVarBranch(r);
00107   }
00108 
00109   inline SetVarBranch
00110   SET_VAR_MERIT_MIN(SetBranchMerit bm, BranchTbl tbl) {
00111     return SetVarBranch(SetVarBranch::SEL_MERIT_MIN,bm,tbl);
00112   }
00113 
00114   inline SetVarBranch
00115   SET_VAR_MERIT_MAX(SetBranchMerit bm, BranchTbl tbl) {
00116     return SetVarBranch(SetVarBranch::SEL_MERIT_MAX,bm,tbl);
00117   }
00118 
00119   inline SetVarBranch
00120   SET_VAR_DEGREE_MIN(BranchTbl tbl) {
00121     return SetVarBranch(SetVarBranch::SEL_DEGREE_MIN,tbl);
00122   }
00123 
00124   inline SetVarBranch
00125   SET_VAR_DEGREE_MAX(BranchTbl tbl) {
00126     return SetVarBranch(SetVarBranch::SEL_DEGREE_MAX,tbl);
00127   }
00128 
00129   inline SetVarBranch
00130   SET_VAR_AFC_MIN(double d, BranchTbl tbl) {
00131     return SetVarBranch(SetVarBranch::SEL_AFC_MIN,d,tbl);
00132   }
00133 
00134   inline SetVarBranch
00135   SET_VAR_AFC_MIN(SetAFC a, BranchTbl tbl) {
00136     return SetVarBranch(SetVarBranch::SEL_AFC_MIN,a,tbl);
00137   }
00138 
00139   inline SetVarBranch
00140   SET_VAR_AFC_MAX(double d, BranchTbl tbl) {
00141     return SetVarBranch(SetVarBranch::SEL_AFC_MAX,d,tbl);
00142   }
00143 
00144   inline SetVarBranch
00145   SET_VAR_AFC_MAX(SetAFC a, BranchTbl tbl) {
00146     return SetVarBranch(SetVarBranch::SEL_AFC_MAX,a,tbl);
00147   }
00148 
00149   inline SetVarBranch
00150   SET_VAR_ACTION_MIN(double d, BranchTbl tbl) {
00151     return SetVarBranch(SetVarBranch::SEL_ACTION_MIN,d,tbl);
00152   }
00153 
00154   inline SetVarBranch
00155   SET_VAR_ACTION_MIN(SetAction a, BranchTbl tbl) {
00156     return SetVarBranch(SetVarBranch::SEL_ACTION_MIN,a,tbl);
00157   }
00158 
00159   inline SetVarBranch
00160   SET_VAR_ACTION_MAX(double d, BranchTbl tbl) {
00161     return SetVarBranch(SetVarBranch::SEL_ACTION_MAX,d,tbl);
00162   }
00163 
00164   inline SetVarBranch
00165   SET_VAR_ACTION_MAX(SetAction a, BranchTbl tbl) {
00166     return SetVarBranch(SetVarBranch::SEL_ACTION_MAX,a,tbl);
00167   }
00168 
00169   inline SetVarBranch
00170   SET_VAR_CHB_MIN(BranchTbl tbl) {
00171     return SetVarBranch(SetVarBranch::SEL_CHB_MIN,tbl);
00172   }
00173 
00174   inline SetVarBranch
00175   SET_VAR_CHB_MIN(SetCHB c, BranchTbl tbl) {
00176     return SetVarBranch(SetVarBranch::SEL_CHB_MIN,c,tbl);
00177   }
00178 
00179   inline SetVarBranch
00180   SET_VAR_CHB_MAX(BranchTbl tbl) {
00181     return SetVarBranch(SetVarBranch::SEL_CHB_MAX,tbl);
00182   }
00183 
00184   inline SetVarBranch
00185   SET_VAR_CHB_MAX(SetCHB c, BranchTbl tbl) {
00186     return SetVarBranch(SetVarBranch::SEL_CHB_MAX,c,tbl);
00187   }
00188 
00189   inline SetVarBranch
00190   SET_VAR_MIN_MIN(BranchTbl tbl) {
00191     return SetVarBranch(SetVarBranch::SEL_MIN_MIN,tbl);
00192   }
00193 
00194   inline SetVarBranch
00195   SET_VAR_MIN_MAX(BranchTbl tbl) {
00196     return SetVarBranch(SetVarBranch::SEL_MIN_MAX,tbl);
00197   }
00198 
00199   inline SetVarBranch
00200   SET_VAR_MAX_MIN(BranchTbl tbl) {
00201     return SetVarBranch(SetVarBranch::SEL_MAX_MIN,tbl);
00202   }
00203 
00204   inline SetVarBranch
00205   SET_VAR_MAX_MAX(BranchTbl tbl) {
00206     return SetVarBranch(SetVarBranch::SEL_MAX_MAX,tbl);
00207   }
00208 
00209   inline SetVarBranch
00210   SET_VAR_SIZE_MIN(BranchTbl tbl) {
00211     return SetVarBranch(SetVarBranch::SEL_SIZE_MIN,tbl);
00212   }
00213 
00214   inline SetVarBranch
00215   SET_VAR_SIZE_MAX(BranchTbl tbl) {
00216     return SetVarBranch(SetVarBranch::SEL_SIZE_MAX,tbl);
00217   }
00218 
00219   inline SetVarBranch
00220   SET_VAR_DEGREE_SIZE_MIN(BranchTbl tbl) {
00221     return SetVarBranch(SetVarBranch::SEL_DEGREE_SIZE_MIN,tbl);
00222   }
00223 
00224   inline SetVarBranch
00225   SET_VAR_DEGREE_SIZE_MAX(BranchTbl tbl) {
00226     return SetVarBranch(SetVarBranch::SEL_DEGREE_SIZE_MAX,tbl);
00227   }
00228 
00229   inline SetVarBranch
00230   SET_VAR_AFC_SIZE_MIN(double d, BranchTbl tbl) {
00231     return SetVarBranch(SetVarBranch::SEL_AFC_SIZE_MIN,d,tbl);
00232   }
00233 
00234   inline SetVarBranch
00235   SET_VAR_AFC_SIZE_MIN(SetAFC a, BranchTbl tbl) {
00236     return SetVarBranch(SetVarBranch::SEL_AFC_SIZE_MIN,a,tbl);
00237   }
00238 
00239   inline SetVarBranch
00240   SET_VAR_AFC_SIZE_MAX(double d, BranchTbl tbl) {
00241     return SetVarBranch(SetVarBranch::SEL_AFC_SIZE_MAX,d,tbl);
00242   }
00243 
00244   inline SetVarBranch
00245   SET_VAR_AFC_SIZE_MAX(SetAFC a, BranchTbl tbl) {
00246     return SetVarBranch(SetVarBranch::SEL_AFC_SIZE_MAX,a,tbl);
00247   }
00248 
00249   inline SetVarBranch
00250   SET_VAR_ACTION_SIZE_MIN(double d, BranchTbl tbl) {
00251     return SetVarBranch(SetVarBranch::SEL_ACTION_SIZE_MIN,d,tbl);
00252   }
00253 
00254   inline SetVarBranch
00255   SET_VAR_ACTION_SIZE_MIN(SetAction a, BranchTbl tbl) {
00256     return SetVarBranch(SetVarBranch::SEL_ACTION_SIZE_MIN,a,tbl);
00257   }
00258 
00259   inline SetVarBranch
00260   SET_VAR_ACTION_SIZE_MAX(double d, BranchTbl tbl) {
00261     return SetVarBranch(SetVarBranch::SEL_ACTION_SIZE_MAX,d,tbl);
00262   }
00263 
00264   inline SetVarBranch
00265   SET_VAR_ACTION_SIZE_MAX(SetAction a, BranchTbl tbl) {
00266     return SetVarBranch(SetVarBranch::SEL_ACTION_SIZE_MAX,a,tbl);
00267   }
00268 
00269   inline SetVarBranch
00270   SET_VAR_CHB_SIZE_MIN(BranchTbl tbl) {
00271     return SetVarBranch(SetVarBranch::SEL_CHB_SIZE_MIN,tbl);
00272   }
00273 
00274   inline SetVarBranch
00275   SET_VAR_CHB_SIZE_MIN(SetCHB c, BranchTbl tbl) {
00276     return SetVarBranch(SetVarBranch::SEL_CHB_SIZE_MIN,c,tbl);
00277   }
00278 
00279   inline SetVarBranch
00280   SET_VAR_CHB_SIZE_MAX(BranchTbl tbl) {
00281     return SetVarBranch(SetVarBranch::SEL_CHB_SIZE_MAX,tbl);
00282   }
00283 
00284   inline SetVarBranch
00285   SET_VAR_CHB_SIZE_MAX(SetCHB c, BranchTbl tbl) {
00286     return SetVarBranch(SetVarBranch::SEL_CHB_SIZE_MAX,c,tbl);
00287   }
00288 
00289 }
00290 
00291 // STATISTICS: set-branch