Generated on Fri Mar 20 15:55:59 2015 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: 2013-02-19 13:26:08 +0100 (Tue, 19 Feb 2013) $ by $Author: schulte $
00011  *     $Revision: 13313 $
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     : VarBranch(NULL), s(SEL_NONE) {}
00043 
00044   forceinline 
00045   SetVarBranch::SetVarBranch(Select s0, BranchTbl t)
00046     : VarBranch(t), s(s0) {}
00047 
00048   forceinline 
00049   SetVarBranch::SetVarBranch(Rnd r)
00050     : VarBranch(r), s(SEL_RND) {}
00051 
00052   forceinline 
00053   SetVarBranch::SetVarBranch(Select s0, double d, BranchTbl t)
00054     : VarBranch(d,t), s(s0) {}
00055 
00056   forceinline 
00057   SetVarBranch::SetVarBranch(Select s0, AFC a, BranchTbl t)
00058     : VarBranch(a,t), s(s0) {}
00059 
00060   forceinline 
00061   SetVarBranch::SetVarBranch(Select s0, Activity a, BranchTbl t)
00062     : VarBranch(a,t), s(s0) {}
00063 
00064   forceinline 
00065   SetVarBranch::SetVarBranch(Select s0, VoidFunction mf, BranchTbl t)
00066     : VarBranch(mf,t), s(s0) {}
00067 
00068   forceinline SetVarBranch::Select
00069   SetVarBranch::select(void) const {
00070     return s;
00071   }
00072 
00073   forceinline void
00074   SetVarBranch::expand(Home home, const SetVarArgs& x) {
00075     switch (select()) {
00076     case SEL_AFC_MIN: case SEL_AFC_MAX:
00077     case SEL_AFC_SIZE_MIN: case SEL_AFC_SIZE_MAX:
00078       if (!_afc.initialized())
00079         _afc = SetAFC(home,x,decay());
00080       break;
00081     case SEL_ACTIVITY_MIN: case SEL_ACTIVITY_MAX:
00082     case SEL_ACTIVITY_SIZE_MIN: case SEL_ACTIVITY_SIZE_MAX:
00083       if (!_act.initialized())
00084         _act = SetActivity(home,x,decay());
00085       break;
00086     default: ;
00087     }
00088   }
00089 
00090   inline SetVarBranch
00091   SET_VAR_NONE(void) {
00092     return SetVarBranch(SetVarBranch::SEL_NONE,NULL);
00093   }
00094 
00095   inline SetVarBranch
00096   SET_VAR_RND(Rnd r) {
00097     return SetVarBranch(r);
00098   }
00099 
00100   inline SetVarBranch
00101   SET_VAR_MERIT_MIN(SetBranchMerit bm, BranchTbl tbl) {
00102     return SetVarBranch(SetVarBranch::SEL_MERIT_MIN,
00103                         function_cast<VoidFunction>(bm),tbl);
00104   }
00105 
00106   inline SetVarBranch
00107   SET_VAR_MERIT_MAX(SetBranchMerit bm, BranchTbl tbl) {
00108     return SetVarBranch(SetVarBranch::SEL_MERIT_MAX,
00109                         function_cast<VoidFunction>(bm),tbl);
00110   }
00111 
00112   inline SetVarBranch
00113   SET_VAR_DEGREE_MIN(BranchTbl tbl) {
00114     return SetVarBranch(SetVarBranch::SEL_DEGREE_MIN,tbl);
00115   }
00116 
00117   inline SetVarBranch
00118   SET_VAR_DEGREE_MAX(BranchTbl tbl) {
00119     return SetVarBranch(SetVarBranch::SEL_DEGREE_MAX,tbl);
00120   }
00121 
00122   inline SetVarBranch
00123   SET_VAR_AFC_MIN(double d, BranchTbl tbl) {
00124     return SetVarBranch(SetVarBranch::SEL_AFC_MIN,d,tbl);
00125   }
00126 
00127   inline SetVarBranch
00128   SET_VAR_AFC_MIN(SetAFC a, BranchTbl tbl) {
00129     return SetVarBranch(SetVarBranch::SEL_AFC_MIN,a,tbl);
00130   }
00131 
00132   inline SetVarBranch
00133   SET_VAR_AFC_MAX(double d, BranchTbl tbl) {
00134     return SetVarBranch(SetVarBranch::SEL_AFC_MAX,d,tbl);
00135   }
00136 
00137   inline SetVarBranch
00138   SET_VAR_AFC_MAX(SetAFC a, BranchTbl tbl) {
00139     return SetVarBranch(SetVarBranch::SEL_AFC_MAX,a,tbl);
00140   }
00141 
00142   inline SetVarBranch
00143   SET_VAR_ACTIVITY_MIN(double d, BranchTbl tbl) {
00144     return SetVarBranch(SetVarBranch::SEL_ACTIVITY_MIN,d,tbl);
00145   }
00146 
00147   inline SetVarBranch
00148   SET_VAR_ACTIVITY_MIN(SetActivity a, BranchTbl tbl) {
00149     return SetVarBranch(SetVarBranch::SEL_ACTIVITY_MIN,a,tbl);
00150   }
00151 
00152   inline SetVarBranch
00153   SET_VAR_ACTIVITY_MAX(double d, BranchTbl tbl) {
00154     return SetVarBranch(SetVarBranch::SEL_ACTIVITY_MAX,d,tbl);
00155   }
00156 
00157   inline SetVarBranch
00158   SET_VAR_ACTIVITY_MAX(SetActivity a, BranchTbl tbl) {
00159     return SetVarBranch(SetVarBranch::SEL_ACTIVITY_MAX,a,tbl);
00160   }
00161 
00162   inline SetVarBranch
00163   SET_VAR_MIN_MIN(BranchTbl tbl) {
00164     return SetVarBranch(SetVarBranch::SEL_MIN_MIN,tbl);
00165   }
00166 
00167   inline SetVarBranch
00168   SET_VAR_MIN_MAX(BranchTbl tbl) {
00169     return SetVarBranch(SetVarBranch::SEL_MIN_MAX,tbl);
00170   }
00171 
00172   inline SetVarBranch
00173   SET_VAR_MAX_MIN(BranchTbl tbl) {
00174     return SetVarBranch(SetVarBranch::SEL_MAX_MIN,tbl);
00175   }
00176 
00177   inline SetVarBranch
00178   SET_VAR_MAX_MAX(BranchTbl tbl) {
00179     return SetVarBranch(SetVarBranch::SEL_MAX_MAX,tbl);
00180   }
00181 
00182   inline SetVarBranch
00183   SET_VAR_SIZE_MIN(BranchTbl tbl) {
00184     return SetVarBranch(SetVarBranch::SEL_SIZE_MIN,tbl);
00185   }
00186 
00187   inline SetVarBranch
00188   SET_VAR_SIZE_MAX(BranchTbl tbl) {
00189     return SetVarBranch(SetVarBranch::SEL_SIZE_MAX,tbl);
00190   }
00191 
00192   inline SetVarBranch
00193   SET_VAR_DEGREE_SIZE_MIN(BranchTbl tbl) {
00194     return SetVarBranch(SetVarBranch::SEL_DEGREE_SIZE_MIN,tbl);
00195   }
00196 
00197   inline SetVarBranch
00198   SET_VAR_DEGREE_SIZE_MAX(BranchTbl tbl) {
00199     return SetVarBranch(SetVarBranch::SEL_DEGREE_SIZE_MAX,tbl);
00200   }
00201 
00202   inline SetVarBranch
00203   SET_VAR_AFC_SIZE_MIN(double d, BranchTbl tbl) {
00204     return SetVarBranch(SetVarBranch::SEL_AFC_SIZE_MIN,d,tbl);
00205   }
00206 
00207   inline SetVarBranch
00208   SET_VAR_AFC_SIZE_MIN(SetAFC a, BranchTbl tbl) {
00209     return SetVarBranch(SetVarBranch::SEL_AFC_SIZE_MIN,a,tbl);
00210   }
00211 
00212   inline SetVarBranch
00213   SET_VAR_AFC_SIZE_MAX(double d, BranchTbl tbl) {
00214     return SetVarBranch(SetVarBranch::SEL_AFC_SIZE_MAX,d,tbl);
00215   }
00216 
00217   inline SetVarBranch
00218   SET_VAR_AFC_SIZE_MAX(SetAFC a, BranchTbl tbl) {
00219     return SetVarBranch(SetVarBranch::SEL_AFC_SIZE_MAX,a,tbl);
00220   }
00221 
00222   inline SetVarBranch
00223   SET_VAR_ACTIVITY_SIZE_MIN(double d, BranchTbl tbl) {
00224     return SetVarBranch(SetVarBranch::SEL_ACTIVITY_SIZE_MIN,d,tbl);
00225   }
00226 
00227   inline SetVarBranch
00228   SET_VAR_ACTIVITY_SIZE_MIN(SetActivity a, BranchTbl tbl) {
00229     return SetVarBranch(SetVarBranch::SEL_ACTIVITY_SIZE_MIN,a,tbl);
00230   }
00231 
00232   inline SetVarBranch
00233   SET_VAR_ACTIVITY_SIZE_MAX(double d, BranchTbl tbl) {
00234     return SetVarBranch(SetVarBranch::SEL_ACTIVITY_SIZE_MAX,d,tbl);
00235   }
00236 
00237   inline SetVarBranch
00238   SET_VAR_ACTIVITY_SIZE_MAX(SetActivity a, BranchTbl tbl) {
00239     return SetVarBranch(SetVarBranch::SEL_ACTIVITY_SIZE_MAX,a,tbl);
00240   }
00241 
00242 }
00243 
00244 // STATISTICS: set-branch