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/float/branch.hh>
00039
00040 namespace Gecode { namespace Float { namespace Branch {
00041
00042 ViewSel<FloatView>*
00043 viewsel(Space& home, const FloatVarBranch& fvb) {
00044 switch (fvb.select()) {
00045 case FloatVarBranch::SEL_NONE:
00046 return new (home) ViewSelNone<FloatView>(home,fvb);
00047 case FloatVarBranch::SEL_RND:
00048 return new (home) ViewSelRnd<FloatView>(home,fvb);
00049 default: break;
00050 }
00051 if (fvb.tbl() != NULL) {
00052 switch (fvb.select()) {
00053 case FloatVarBranch::SEL_MERIT_MIN:
00054 return new (home) ViewSelMinTbl<MeritFunction<FloatView>>(home,fvb);
00055 case FloatVarBranch::SEL_MERIT_MAX:
00056 return new (home) ViewSelMaxTbl<MeritFunction<FloatView>>(home,fvb);
00057 case FloatVarBranch::SEL_MIN_MIN:
00058 return new (home) ViewSelMinTbl<MeritMin>(home,fvb);
00059 case FloatVarBranch::SEL_MIN_MAX:
00060 return new (home) ViewSelMaxTbl<MeritMin>(home,fvb);
00061 case FloatVarBranch::SEL_MAX_MIN:
00062 return new (home) ViewSelMinTbl<MeritMax>(home,fvb);
00063 case FloatVarBranch::SEL_MAX_MAX:
00064 return new (home) ViewSelMaxTbl<MeritMax>(home,fvb);
00065 case FloatVarBranch::SEL_SIZE_MIN:
00066 return new (home) ViewSelMinTbl<MeritSize>(home,fvb);
00067 case FloatVarBranch::SEL_SIZE_MAX:
00068 return new (home) ViewSelMaxTbl<MeritSize>(home,fvb);
00069 case FloatVarBranch::SEL_DEGREE_MIN:
00070 return new (home) ViewSelMinTbl<MeritDegree<FloatView>>(home,fvb);
00071 case FloatVarBranch::SEL_DEGREE_MAX:
00072 return new (home) ViewSelMaxTbl<MeritDegree<FloatView>>(home,fvb);
00073 case FloatVarBranch::SEL_AFC_MIN:
00074 return new (home) ViewSelMinTbl<MeritAFC<FloatView>>(home,fvb);
00075 case FloatVarBranch::SEL_AFC_MAX:
00076 return new (home) ViewSelMaxTbl<MeritAFC<FloatView>>(home,fvb);
00077 case FloatVarBranch::SEL_ACTION_MIN:
00078 return new (home) ViewSelMinTbl<MeritAction<FloatView>>(home,fvb);
00079 case FloatVarBranch::SEL_ACTION_MAX:
00080 return new (home) ViewSelMaxTbl<MeritAction<FloatView>>(home,fvb);
00081 case FloatVarBranch::SEL_CHB_MIN:
00082 return new (home) ViewSelMinTbl<MeritCHB<FloatView>>(home,fvb);
00083 case FloatVarBranch::SEL_CHB_MAX:
00084 return new (home) ViewSelMaxTbl<MeritCHB<FloatView>>(home,fvb);
00085 case FloatVarBranch::SEL_DEGREE_SIZE_MIN:
00086 return new (home) ViewSelMinTbl<MeritDegreeSize>(home,fvb);
00087 case FloatVarBranch::SEL_DEGREE_SIZE_MAX:
00088 return new (home) ViewSelMaxTbl<MeritDegreeSize>(home,fvb);
00089 case FloatVarBranch::SEL_AFC_SIZE_MIN:
00090 return new (home) ViewSelMinTbl<MeritAFCSize>(home,fvb);
00091 case FloatVarBranch::SEL_AFC_SIZE_MAX:
00092 return new (home) ViewSelMaxTbl<MeritAFCSize>(home,fvb);
00093 case FloatVarBranch::SEL_ACTION_SIZE_MIN:
00094 return new (home) ViewSelMinTbl<MeritActionSize>(home,fvb);
00095 case FloatVarBranch::SEL_ACTION_SIZE_MAX:
00096 return new (home) ViewSelMaxTbl<MeritActionSize>(home,fvb);
00097 case FloatVarBranch::SEL_CHB_SIZE_MIN:
00098 return new (home) ViewSelMinTbl<MeritCHBSize>(home,fvb);
00099 case FloatVarBranch::SEL_CHB_SIZE_MAX:
00100 return new (home) ViewSelMaxTbl<MeritCHBSize>(home,fvb);
00101 default:
00102 throw UnknownBranching("Float::branch");
00103 }
00104 } else {
00105 switch (fvb.select()) {
00106 case FloatVarBranch::SEL_MERIT_MIN:
00107 return new (home) ViewSelMin<MeritFunction<FloatView>>(home,fvb);
00108 case FloatVarBranch::SEL_MERIT_MAX:
00109 return new (home) ViewSelMax<MeritFunction<FloatView>>(home,fvb);
00110 case FloatVarBranch::SEL_MIN_MIN:
00111 return new (home) ViewSelMin<MeritMin>(home,fvb);
00112 case FloatVarBranch::SEL_MIN_MAX:
00113 return new (home) ViewSelMax<MeritMin>(home,fvb);
00114 case FloatVarBranch::SEL_MAX_MIN:
00115 return new (home) ViewSelMin<MeritMax>(home,fvb);
00116 case FloatVarBranch::SEL_MAX_MAX:
00117 return new (home) ViewSelMax<MeritMax>(home,fvb);
00118 case FloatVarBranch::SEL_SIZE_MIN:
00119 return new (home) ViewSelMin<MeritSize>(home,fvb);
00120 case FloatVarBranch::SEL_SIZE_MAX:
00121 return new (home) ViewSelMax<MeritSize>(home,fvb);
00122 case FloatVarBranch::SEL_DEGREE_MIN:
00123 return new (home) ViewSelMin<MeritDegree<FloatView>>(home,fvb);
00124 case FloatVarBranch::SEL_DEGREE_MAX:
00125 return new (home) ViewSelMax<MeritDegree<FloatView>>(home,fvb);
00126 case FloatVarBranch::SEL_AFC_MIN:
00127 return new (home) ViewSelMin<MeritAFC<FloatView>>(home,fvb);
00128 case FloatVarBranch::SEL_AFC_MAX:
00129 return new (home) ViewSelMax<MeritAFC<FloatView>>(home,fvb);
00130 case FloatVarBranch::SEL_ACTION_MIN:
00131 return new (home) ViewSelMin<MeritAction<FloatView>>(home,fvb);
00132 case FloatVarBranch::SEL_ACTION_MAX:
00133 return new (home) ViewSelMax<MeritAction<FloatView>>(home,fvb);
00134 case FloatVarBranch::SEL_CHB_MIN:
00135 return new (home) ViewSelMin<MeritCHB<FloatView>>(home,fvb);
00136 case FloatVarBranch::SEL_CHB_MAX:
00137 return new (home) ViewSelMax<MeritCHB<FloatView>>(home,fvb);
00138 case FloatVarBranch::SEL_DEGREE_SIZE_MIN:
00139 return new (home) ViewSelMin<MeritDegreeSize>(home,fvb);
00140 case FloatVarBranch::SEL_DEGREE_SIZE_MAX:
00141 return new (home) ViewSelMax<MeritDegreeSize>(home,fvb);
00142 case FloatVarBranch::SEL_AFC_SIZE_MIN:
00143 return new (home) ViewSelMin<MeritAFCSize>(home,fvb);
00144 case FloatVarBranch::SEL_AFC_SIZE_MAX:
00145 return new (home) ViewSelMax<MeritAFCSize>(home,fvb);
00146 case FloatVarBranch::SEL_ACTION_SIZE_MIN:
00147 return new (home) ViewSelMin<MeritActionSize>(home,fvb);
00148 case FloatVarBranch::SEL_ACTION_SIZE_MAX:
00149 return new (home) ViewSelMax<MeritActionSize>(home,fvb);
00150 case FloatVarBranch::SEL_CHB_SIZE_MIN:
00151 return new (home) ViewSelMin<MeritCHBSize>(home,fvb);
00152 case FloatVarBranch::SEL_CHB_SIZE_MAX:
00153 return new (home) ViewSelMax<MeritCHBSize>(home,fvb);
00154 default:
00155 throw UnknownBranching("Float::branch");
00156 }
00157 }
00158 GECODE_NEVER;
00159 return NULL;
00160 }
00161
00162 }}}
00163
00164
00165
00166