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 #include <gecode/int/branch.hh>
00039
00040 namespace Gecode { namespace Int { namespace Branch {
00041
00042 ViewSel<IntView>*
00043 viewsel(Space& home, const IntVarBranch& ivb) {
00044 switch (ivb.select()) {
00045 case IntVarBranch::SEL_NONE:
00046 return new (home) ViewSelNone<IntView>(home,ivb);
00047 case IntVarBranch::SEL_RND:
00048 return new (home) ViewSelRnd<IntView>(home,ivb);
00049 default: break;
00050 }
00051 if (ivb.tbl() != NULL) {
00052 switch (ivb.select()) {
00053 case IntVarBranch::SEL_MERIT_MIN:
00054 return new (home) ViewSelMinTbl<MeritFunction<IntView>>(home,ivb);
00055 case IntVarBranch::SEL_MERIT_MAX:
00056 return new (home) ViewSelMaxTbl<MeritFunction<IntView>>(home,ivb);
00057 case IntVarBranch::SEL_MIN_MIN:
00058 return new (home) ViewSelMinTbl<MeritMin<IntView>>(home,ivb);
00059 case IntVarBranch::SEL_MIN_MAX:
00060 return new (home) ViewSelMaxTbl<MeritMin<IntView>>(home,ivb);
00061 case IntVarBranch::SEL_MAX_MIN:
00062 return new (home) ViewSelMinTbl<MeritMax<IntView>>(home,ivb);
00063 case IntVarBranch::SEL_MAX_MAX:
00064 return new (home) ViewSelMaxTbl<MeritMax<IntView>>(home,ivb);
00065 case IntVarBranch::SEL_SIZE_MIN:
00066 return new (home) ViewSelMinTbl<MeritSize<IntView>>(home,ivb);
00067 case IntVarBranch::SEL_SIZE_MAX:
00068 return new (home) ViewSelMaxTbl<MeritSize<IntView>>(home,ivb);
00069 case IntVarBranch::SEL_DEGREE_MIN:
00070 return new (home) ViewSelMinTbl<MeritDegree<IntView>>(home,ivb);
00071 case IntVarBranch::SEL_DEGREE_MAX:
00072 return new (home) ViewSelMaxTbl<MeritDegree<IntView>>(home,ivb);
00073 case IntVarBranch::SEL_AFC_MIN:
00074 return new (home) ViewSelMinTbl<MeritAFC<IntView>>(home,ivb);
00075 case IntVarBranch::SEL_AFC_MAX:
00076 return new (home) ViewSelMaxTbl<MeritAFC<IntView>>(home,ivb);
00077 case IntVarBranch::SEL_ACTION_MIN:
00078 return new (home) ViewSelMinTbl<MeritAction<IntView>>(home,ivb);
00079 case IntVarBranch::SEL_ACTION_MAX:
00080 return new (home) ViewSelMaxTbl<MeritAction<IntView>>(home,ivb);
00081 case IntVarBranch::SEL_CHB_MIN:
00082 return new (home) ViewSelMinTbl<MeritCHB<IntView>>(home,ivb);
00083 case IntVarBranch::SEL_CHB_MAX:
00084 return new (home) ViewSelMaxTbl<MeritCHB<IntView>>(home,ivb);
00085 case IntVarBranch::SEL_DEGREE_SIZE_MIN:
00086 return new (home) ViewSelMinTbl<MeritDegreeSize<IntView>>(home,ivb);
00087 case IntVarBranch::SEL_DEGREE_SIZE_MAX:
00088 return new (home) ViewSelMaxTbl<MeritDegreeSize<IntView>>(home,ivb);
00089 case IntVarBranch::SEL_AFC_SIZE_MIN:
00090 return new (home) ViewSelMinTbl<MeritAFCSize<IntView>>(home,ivb);
00091 case IntVarBranch::SEL_AFC_SIZE_MAX:
00092 return new (home) ViewSelMaxTbl<MeritAFCSize<IntView>>(home,ivb);
00093 case IntVarBranch::SEL_ACTION_SIZE_MIN:
00094 return new (home) ViewSelMinTbl<MeritActionSize<IntView>>(home,ivb);
00095 case IntVarBranch::SEL_ACTION_SIZE_MAX:
00096 return new (home) ViewSelMaxTbl<MeritActionSize<IntView>>(home,ivb);
00097 case IntVarBranch::SEL_CHB_SIZE_MIN:
00098 return new (home) ViewSelMinTbl<MeritCHBSize<IntView>>(home,ivb);
00099 case IntVarBranch::SEL_CHB_SIZE_MAX:
00100 return new (home) ViewSelMaxTbl<MeritCHBSize<IntView>>(home,ivb);
00101 case IntVarBranch::SEL_REGRET_MIN_MIN:
00102 return new (home) ViewSelMinTbl<MeritRegretMin<IntView>>(home,ivb);
00103 case IntVarBranch::SEL_REGRET_MIN_MAX:
00104 return new (home) ViewSelMaxTbl<MeritRegretMin<IntView>>(home,ivb);
00105 case IntVarBranch::SEL_REGRET_MAX_MIN:
00106 return new (home) ViewSelMinTbl<MeritRegretMax<IntView>>(home,ivb);
00107 case IntVarBranch::SEL_REGRET_MAX_MAX:
00108 return new (home) ViewSelMaxTbl<MeritRegretMax<IntView>>(home,ivb);
00109 default:
00110 throw UnknownBranching("Int::branch");
00111 }
00112 } else {
00113 switch (ivb.select()) {
00114 case IntVarBranch::SEL_MERIT_MIN:
00115 return new (home) ViewSelMin<MeritFunction<IntView>>(home,ivb);
00116 case IntVarBranch::SEL_MERIT_MAX:
00117 return new (home) ViewSelMax<MeritFunction<IntView>>(home,ivb);
00118 case IntVarBranch::SEL_MIN_MIN:
00119 return new (home) ViewSelMin<MeritMin<IntView>>(home,ivb);
00120 case IntVarBranch::SEL_MIN_MAX:
00121 return new (home) ViewSelMax<MeritMin<IntView>>(home,ivb);
00122 case IntVarBranch::SEL_MAX_MIN:
00123 return new (home) ViewSelMin<MeritMax<IntView>>(home,ivb);
00124 case IntVarBranch::SEL_MAX_MAX:
00125 return new (home) ViewSelMax<MeritMax<IntView>>(home,ivb);
00126 case IntVarBranch::SEL_SIZE_MIN:
00127 return new (home) ViewSelMin<MeritSize<IntView>>(home,ivb);
00128 case IntVarBranch::SEL_SIZE_MAX:
00129 return new (home) ViewSelMax<MeritSize<IntView>>(home,ivb);
00130 case IntVarBranch::SEL_DEGREE_MIN:
00131 return new (home) ViewSelMin<MeritDegree<IntView>>(home,ivb);
00132 case IntVarBranch::SEL_DEGREE_MAX:
00133 return new (home) ViewSelMax<MeritDegree<IntView>>(home,ivb);
00134 case IntVarBranch::SEL_AFC_MIN:
00135 return new (home) ViewSelMin<MeritAFC<IntView>>(home,ivb);
00136 case IntVarBranch::SEL_AFC_MAX:
00137 return new (home) ViewSelMax<MeritAFC<IntView>>(home,ivb);
00138 case IntVarBranch::SEL_ACTION_MIN:
00139 return new (home) ViewSelMin<MeritAction<IntView>>(home,ivb);
00140 case IntVarBranch::SEL_ACTION_MAX:
00141 return new (home) ViewSelMax<MeritAction<IntView>>(home,ivb);
00142 case IntVarBranch::SEL_CHB_MIN:
00143 return new (home) ViewSelMin<MeritCHB<IntView>>(home,ivb);
00144 case IntVarBranch::SEL_CHB_MAX:
00145 return new (home) ViewSelMax<MeritCHB<IntView>>(home,ivb);
00146 case IntVarBranch::SEL_DEGREE_SIZE_MIN:
00147 return new (home) ViewSelMin<MeritDegreeSize<IntView>>(home,ivb);
00148 case IntVarBranch::SEL_DEGREE_SIZE_MAX:
00149 return new (home) ViewSelMax<MeritDegreeSize<IntView>>(home,ivb);
00150 case IntVarBranch::SEL_AFC_SIZE_MIN:
00151 return new (home) ViewSelMin<MeritAFCSize<IntView>>(home,ivb);
00152 case IntVarBranch::SEL_AFC_SIZE_MAX:
00153 return new (home) ViewSelMax<MeritAFCSize<IntView>>(home,ivb);
00154 case IntVarBranch::SEL_ACTION_SIZE_MIN:
00155 return new (home) ViewSelMin<MeritActionSize<IntView>>(home,ivb);
00156 case IntVarBranch::SEL_ACTION_SIZE_MAX:
00157 return new (home) ViewSelMax<MeritActionSize<IntView>>(home,ivb);
00158 case IntVarBranch::SEL_CHB_SIZE_MIN:
00159 return new (home) ViewSelMin<MeritCHBSize<IntView>>(home,ivb);
00160 case IntVarBranch::SEL_CHB_SIZE_MAX:
00161 return new (home) ViewSelMax<MeritCHBSize<IntView>>(home,ivb);
00162 case IntVarBranch::SEL_REGRET_MIN_MIN:
00163 return new (home) ViewSelMin<MeritRegretMin<IntView>>(home,ivb);
00164 case IntVarBranch::SEL_REGRET_MIN_MAX:
00165 return new (home) ViewSelMax<MeritRegretMin<IntView>>(home,ivb);
00166 case IntVarBranch::SEL_REGRET_MAX_MIN:
00167 return new (home) ViewSelMin<MeritRegretMax<IntView>>(home,ivb);
00168 case IntVarBranch::SEL_REGRET_MAX_MAX:
00169 return new (home) ViewSelMax<MeritRegretMax<IntView>>(home,ivb);
00170 default:
00171 throw UnknownBranching("Int::branch");
00172 }
00173 }
00174 GECODE_NEVER;
00175 return NULL;
00176 }
00177
00178 ViewSel<BoolView>*
00179 viewsel(Space& home, const BoolVarBranch& bvb) {
00180 switch (bvb.select()) {
00181 case BoolVarBranch::SEL_NONE:
00182 return new (home) ViewSelNone<BoolView>(home,bvb);
00183 case BoolVarBranch::SEL_RND:
00184 return new (home) ViewSelRnd<BoolView>(home,bvb);
00185 default: break;
00186 }
00187 if (bvb.tbl() != NULL) {
00188 switch (bvb.select()) {
00189 case BoolVarBranch::SEL_MERIT_MIN:
00190 return new (home) ViewSelMinTbl<MeritFunction<BoolView>>(home,bvb);
00191 case BoolVarBranch::SEL_MERIT_MAX:
00192 return new (home) ViewSelMaxTbl<MeritFunction<BoolView>>(home,bvb);
00193 case BoolVarBranch::SEL_DEGREE_MIN:
00194 return new (home) ViewSelMinTbl<MeritDegree<BoolView>>(home,bvb);
00195 case BoolVarBranch::SEL_DEGREE_MAX:
00196 return new (home) ViewSelMaxTbl<MeritDegree<BoolView>>(home,bvb);
00197 case BoolVarBranch::SEL_AFC_MIN:
00198 return new (home) ViewSelMinTbl<MeritAFC<BoolView>>(home,bvb);
00199 case BoolVarBranch::SEL_AFC_MAX:
00200 return new (home) ViewSelMaxTbl<MeritAFC<BoolView>>(home,bvb);
00201 case BoolVarBranch::SEL_ACTION_MIN:
00202 return new (home) ViewSelMinTbl<MeritAction<BoolView>>(home,bvb);
00203 case BoolVarBranch::SEL_ACTION_MAX:
00204 return new (home) ViewSelMaxTbl<MeritAction<BoolView>>(home,bvb);
00205 case BoolVarBranch::SEL_CHB_MIN:
00206 return new (home) ViewSelMinTbl<MeritCHB<BoolView>>(home,bvb);
00207 case BoolVarBranch::SEL_CHB_MAX:
00208 return new (home) ViewSelMaxTbl<MeritCHB<BoolView>>(home,bvb);
00209 default:
00210 throw UnknownBranching("Int::branch");
00211 }
00212 } else {
00213 switch (bvb.select()) {
00214 case BoolVarBranch::SEL_MERIT_MIN:
00215 return new (home) ViewSelMin<MeritFunction<BoolView>>(home,bvb);
00216 case BoolVarBranch::SEL_MERIT_MAX:
00217 return new (home) ViewSelMax<MeritFunction<BoolView>>(home,bvb);
00218 case BoolVarBranch::SEL_DEGREE_MIN:
00219 return new (home) ViewSelMin<MeritDegree<BoolView>>(home,bvb);
00220 case BoolVarBranch::SEL_DEGREE_MAX:
00221 return new (home) ViewSelMax<MeritDegree<BoolView>>(home,bvb);
00222 case BoolVarBranch::SEL_AFC_MIN:
00223 return new (home) ViewSelMin<MeritAFC<BoolView>>(home,bvb);
00224 case BoolVarBranch::SEL_AFC_MAX:
00225 return new (home) ViewSelMax<MeritAFC<BoolView>>(home,bvb);
00226 case BoolVarBranch::SEL_ACTION_MIN:
00227 return new (home) ViewSelMin<MeritAction<BoolView>>(home,bvb);
00228 case BoolVarBranch::SEL_ACTION_MAX:
00229 return new (home) ViewSelMax<MeritAction<BoolView>>(home,bvb);
00230 case BoolVarBranch::SEL_CHB_MIN:
00231 return new (home) ViewSelMin<MeritCHB<BoolView>>(home,bvb);
00232 case BoolVarBranch::SEL_CHB_MAX:
00233 return new (home) ViewSelMax<MeritCHB<BoolView>>(home,bvb);
00234 default:
00235 throw UnknownBranching("Int::branch");
00236 }
00237 }
00238 GECODE_NEVER;
00239 return NULL;
00240 }
00241
00242 }}}
00243
00244
00245
00246