00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
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