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