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 : VarBranch(NULL), s(SEL_NONE) {}
00043
00044 forceinline
00045 IntVarBranch::IntVarBranch(Select s0, BranchTbl t)
00046 : VarBranch(t), s(s0) {}
00047
00048 forceinline
00049 IntVarBranch::IntVarBranch(Rnd r)
00050 : VarBranch(r), s(SEL_RND) {}
00051
00052 forceinline
00053 IntVarBranch::IntVarBranch(Select s0, double d, BranchTbl t)
00054 : VarBranch(d,t), s(s0) {}
00055
00056 forceinline
00057 IntVarBranch::IntVarBranch(Select s0, AFC a, BranchTbl t)
00058 : VarBranch(a,t), s(s0) {}
00059
00060 forceinline
00061 IntVarBranch::IntVarBranch(Select s0, Activity a, BranchTbl t)
00062 : VarBranch(a,t), s(s0) {}
00063
00064 forceinline
00065 IntVarBranch::IntVarBranch(Select s0, VoidFunction mf, BranchTbl t)
00066 : VarBranch(mf,t), s(s0) {}
00067
00068 forceinline IntVarBranch::Select
00069 IntVarBranch::select(void) const {
00070 return s;
00071 }
00072
00073 forceinline void
00074 IntVarBranch::expand(Home home, const IntVarArgs& 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 = IntAFC(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 = IntActivity(home,x,decay());
00085 break;
00086 default: ;
00087 }
00088 }
00089
00090 forceinline void
00091 IntVarBranch::expand(Home home, const BoolVarArgs& x) {
00092 switch (select()) {
00093 case SEL_AFC_MIN: case SEL_AFC_MAX:
00094 case SEL_AFC_SIZE_MIN: case SEL_AFC_SIZE_MAX:
00095 if (!_afc.initialized())
00096 _afc = IntAFC(home,x,decay());
00097 break;
00098 case SEL_ACTIVITY_MIN: case SEL_ACTIVITY_MAX:
00099 case SEL_ACTIVITY_SIZE_MIN: case SEL_ACTIVITY_SIZE_MAX:
00100 if (!_act.initialized())
00101 _act = IntActivity(home,x,decay());
00102 break;
00103 default: ;
00104 }
00105 }
00106
00107 inline IntVarBranch
00108 INT_VAR_NONE(void) {
00109 return IntVarBranch(IntVarBranch::SEL_NONE,NULL);
00110 }
00111
00112 inline IntVarBranch
00113 INT_VAR_RND(Rnd r) {
00114 return IntVarBranch(r);
00115 }
00116
00117 inline IntVarBranch
00118 INT_VAR_MERIT_MIN(IntBranchMerit bm, BranchTbl tbl) {
00119 return IntVarBranch(IntVarBranch::SEL_MERIT_MIN,
00120 function_cast<VoidFunction>(bm),tbl);
00121 }
00122
00123 inline IntVarBranch
00124 INT_VAR_MERIT_MIN(BoolBranchMerit bm, BranchTbl tbl) {
00125 return IntVarBranch(IntVarBranch::SEL_MERIT_MIN,
00126 function_cast<VoidFunction>(bm),tbl);
00127 }
00128
00129 inline IntVarBranch
00130 INT_VAR_MERIT_MAX(IntBranchMerit bm, BranchTbl tbl) {
00131 return IntVarBranch(IntVarBranch::SEL_MERIT_MAX,
00132 function_cast<VoidFunction>(bm),tbl);
00133 }
00134
00135 inline IntVarBranch
00136 INT_VAR_MERIT_MAX(BoolBranchMerit bm, BranchTbl tbl) {
00137 return IntVarBranch(IntVarBranch::SEL_MERIT_MAX,
00138 function_cast<VoidFunction>(bm),tbl);
00139 }
00140
00141 inline IntVarBranch
00142 INT_VAR_DEGREE_MIN(BranchTbl tbl) {
00143 return IntVarBranch(IntVarBranch::SEL_DEGREE_MIN,tbl);
00144 }
00145
00146 inline IntVarBranch
00147 INT_VAR_DEGREE_MAX(BranchTbl tbl) {
00148 return IntVarBranch(IntVarBranch::SEL_DEGREE_MAX,tbl);
00149 }
00150
00151 inline IntVarBranch
00152 INT_VAR_AFC_MIN(double d, BranchTbl tbl) {
00153 return IntVarBranch(IntVarBranch::SEL_AFC_MIN,d,tbl);
00154 }
00155
00156 inline IntVarBranch
00157 INT_VAR_AFC_MIN(IntAFC a, BranchTbl tbl) {
00158 return IntVarBranch(IntVarBranch::SEL_AFC_MIN,a,tbl);
00159 }
00160
00161 inline IntVarBranch
00162 INT_VAR_AFC_MAX(double d, BranchTbl tbl) {
00163 return IntVarBranch(IntVarBranch::SEL_AFC_MAX,d,tbl);
00164 }
00165
00166 inline IntVarBranch
00167 INT_VAR_AFC_MAX(IntAFC a, BranchTbl tbl) {
00168 return IntVarBranch(IntVarBranch::SEL_AFC_MAX,a,tbl);
00169 }
00170
00171 inline IntVarBranch
00172 INT_VAR_ACTIVITY_MIN(double d, BranchTbl tbl) {
00173 return IntVarBranch(IntVarBranch::SEL_ACTIVITY_MIN,d,tbl);
00174 }
00175
00176 inline IntVarBranch
00177 INT_VAR_ACTIVITY_MIN(IntActivity a, BranchTbl tbl) {
00178 return IntVarBranch(IntVarBranch::SEL_ACTIVITY_MIN,a,tbl);
00179 }
00180
00181 inline IntVarBranch
00182 INT_VAR_ACTIVITY_MAX(double d, BranchTbl tbl) {
00183 return IntVarBranch(IntVarBranch::SEL_ACTIVITY_MAX,d,tbl);
00184 }
00185
00186 inline IntVarBranch
00187 INT_VAR_ACTIVITY_MAX(IntActivity a, BranchTbl tbl) {
00188 return IntVarBranch(IntVarBranch::SEL_ACTIVITY_MAX,a,tbl);
00189 }
00190
00191 inline IntVarBranch
00192 INT_VAR_MIN_MIN(BranchTbl tbl) {
00193 return IntVarBranch(IntVarBranch::SEL_MIN_MIN,tbl);
00194 }
00195
00196 inline IntVarBranch
00197 INT_VAR_MIN_MAX(BranchTbl tbl) {
00198 return IntVarBranch(IntVarBranch::SEL_MIN_MAX,tbl);
00199 }
00200
00201 inline IntVarBranch
00202 INT_VAR_MAX_MIN(BranchTbl tbl) {
00203 return IntVarBranch(IntVarBranch::SEL_MAX_MIN,tbl);
00204 }
00205
00206 inline IntVarBranch
00207 INT_VAR_MAX_MAX(BranchTbl tbl) {
00208 return IntVarBranch(IntVarBranch::SEL_MAX_MAX,tbl);
00209 }
00210
00211 inline IntVarBranch
00212 INT_VAR_SIZE_MIN(BranchTbl tbl) {
00213 return IntVarBranch(IntVarBranch::SEL_SIZE_MIN,tbl);
00214 }
00215
00216 inline IntVarBranch
00217 INT_VAR_SIZE_MAX(BranchTbl tbl) {
00218 return IntVarBranch(IntVarBranch::SEL_SIZE_MAX,tbl);
00219 }
00220
00221 inline IntVarBranch
00222 INT_VAR_DEGREE_SIZE_MIN(BranchTbl tbl) {
00223 return IntVarBranch(IntVarBranch::SEL_DEGREE_SIZE_MIN,tbl);
00224 }
00225
00226 inline IntVarBranch
00227 INT_VAR_DEGREE_SIZE_MAX(BranchTbl tbl) {
00228 return IntVarBranch(IntVarBranch::SEL_DEGREE_SIZE_MAX,tbl);
00229 }
00230
00231 inline IntVarBranch
00232 INT_VAR_AFC_SIZE_MIN(double d, BranchTbl tbl) {
00233 return IntVarBranch(IntVarBranch::SEL_AFC_SIZE_MIN,d,tbl);
00234 }
00235
00236 inline IntVarBranch
00237 INT_VAR_AFC_SIZE_MIN(IntAFC a, BranchTbl tbl) {
00238 return IntVarBranch(IntVarBranch::SEL_AFC_SIZE_MIN,a,tbl);
00239 }
00240
00241 inline IntVarBranch
00242 INT_VAR_AFC_SIZE_MAX(double d, BranchTbl tbl) {
00243 return IntVarBranch(IntVarBranch::SEL_AFC_SIZE_MAX,d,tbl);
00244 }
00245
00246 inline IntVarBranch
00247 INT_VAR_AFC_SIZE_MAX(IntAFC a, BranchTbl tbl) {
00248 return IntVarBranch(IntVarBranch::SEL_AFC_SIZE_MAX,a,tbl);
00249 }
00250
00251 inline IntVarBranch
00252 INT_VAR_ACTIVITY_SIZE_MIN(double d, BranchTbl tbl) {
00253 return IntVarBranch(IntVarBranch::SEL_ACTIVITY_SIZE_MIN,d,tbl);
00254 }
00255
00256 inline IntVarBranch
00257 INT_VAR_ACTIVITY_SIZE_MIN(IntActivity a, BranchTbl tbl) {
00258 return IntVarBranch(IntVarBranch::SEL_ACTIVITY_SIZE_MIN,a,tbl);
00259 }
00260
00261 inline IntVarBranch
00262 INT_VAR_ACTIVITY_SIZE_MAX(double d, BranchTbl tbl) {
00263 return IntVarBranch(IntVarBranch::SEL_ACTIVITY_SIZE_MAX,d,tbl);
00264 }
00265
00266 inline IntVarBranch
00267 INT_VAR_ACTIVITY_SIZE_MAX(IntActivity a, BranchTbl tbl) {
00268 return IntVarBranch(IntVarBranch::SEL_ACTIVITY_SIZE_MAX,a,tbl);
00269 }
00270
00271 inline IntVarBranch
00272 INT_VAR_REGRET_MIN_MIN(BranchTbl tbl) {
00273 return IntVarBranch(IntVarBranch::SEL_REGRET_MIN_MIN,tbl);
00274 }
00275
00276 inline IntVarBranch
00277 INT_VAR_REGRET_MIN_MAX(BranchTbl tbl) {
00278 return IntVarBranch(IntVarBranch::SEL_REGRET_MIN_MAX,tbl);
00279 }
00280
00281 inline IntVarBranch
00282 INT_VAR_REGRET_MAX_MIN(BranchTbl tbl) {
00283 return IntVarBranch(IntVarBranch::SEL_REGRET_MAX_MIN,tbl);
00284 }
00285
00286 inline IntVarBranch
00287 INT_VAR_REGRET_MAX_MAX(BranchTbl tbl) {
00288 return IntVarBranch(IntVarBranch::SEL_REGRET_MAX_MAX,tbl);
00289 }
00290
00291 }
00292
00293