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 : 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