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 namespace MiniModel {
00041
00042
00043
00044
00045
00046 template<class Var>
00047 forceinline
00048 LinRel<Var>::LinRel(void) {}
00049
00050 template<class Var>
00051 forceinline
00052 LinRel<Var>::LinRel(const LinExpr<Var>& l, IntRelType irt0,
00053 const LinExpr<Var>& r)
00054 : e(l-r), irt(irt0) {}
00055
00056 template<class Var>
00057 forceinline
00058 LinRel<Var>::LinRel(const LinExpr<Var>& l, IntRelType irt0, int r)
00059 : e(l-r), irt(irt0) {}
00060
00061 template<class Var>
00062 forceinline
00063 LinRel<Var>::LinRel(int l, IntRelType irt0, const LinExpr<Var>& r)
00064 : e(l-r), irt(irt0) {}
00065
00066 template<class Var>
00067 forceinline IntRelType
00068 LinRel<Var>::neg(IntRelType irt) {
00069 switch (irt) {
00070 case IRT_EQ: return IRT_NQ;
00071 case IRT_NQ: return IRT_EQ;
00072 case IRT_LQ: return IRT_GR;
00073 case IRT_LE: return IRT_GQ;
00074 case IRT_GQ: return IRT_LE;
00075 case IRT_GR: return IRT_LQ;
00076 default: GECODE_NEVER;
00077 }
00078 return IRT_LQ;
00079 }
00080
00081 template<class Var>
00082 inline void
00083 LinRel<Var>::post(Space* home, bool t,
00084 IntConLevel icl, PropKind pk) const {
00085 if (t) {
00086 e.post(home,irt,icl,pk);
00087 } else {
00088 e.post(home,neg(irt),icl,pk);
00089 }
00090 }
00091
00092 template<class Var>
00093 forceinline void
00094 LinRel<Var>::post(Space* home, const BoolVar& b,
00095 IntConLevel icl, PropKind pk) const {
00096 e.post(home,irt,b,icl,pk);
00097 }
00098
00099 }
00100
00101 }
00102
00103
00104
00105
00106
00107 inline Gecode::MiniModel::LinRel<Gecode::IntVar>
00108 operator==(int l,
00109 const Gecode::MiniModel::LinExpr<Gecode::IntVar>& r) {
00110 return Gecode::MiniModel::LinRel<Gecode::IntVar>(l,Gecode::IRT_EQ,r);
00111 }
00112 inline Gecode::MiniModel::LinRel<Gecode::IntVar>
00113 operator==(const Gecode::MiniModel::LinExpr<Gecode::IntVar>& l,
00114 int r) {
00115 return Gecode::MiniModel::LinRel<Gecode::IntVar>(l,Gecode::IRT_EQ,r);
00116 }
00117 inline Gecode::MiniModel::LinRel<Gecode::IntVar>
00118 operator==(const Gecode::MiniModel::LinExpr<Gecode::IntVar>& l,
00119 const Gecode::MiniModel::LinExpr<Gecode::IntVar>& r) {
00120 return Gecode::MiniModel::LinRel<Gecode::IntVar>(l,Gecode::IRT_EQ,r);
00121 }
00122
00123 inline Gecode::MiniModel::LinRel<Gecode::IntVar>
00124 operator!=(int l,
00125 const Gecode::MiniModel::LinExpr<Gecode::IntVar>& r) {
00126 return Gecode::MiniModel::LinRel<Gecode::IntVar>(l,Gecode::IRT_NQ,r);
00127 }
00128 inline Gecode::MiniModel::LinRel<Gecode::IntVar>
00129 operator!=(const Gecode::MiniModel::LinExpr<Gecode::IntVar>& l,
00130 int r) {
00131 return Gecode::MiniModel::LinRel<Gecode::IntVar>(l,Gecode::IRT_NQ,r);
00132 }
00133 inline Gecode::MiniModel::LinRel<Gecode::IntVar>
00134 operator!=(const Gecode::MiniModel::LinExpr<Gecode::IntVar>& l,
00135 const Gecode::MiniModel::LinExpr<Gecode::IntVar>& r) {
00136 return Gecode::MiniModel::LinRel<Gecode::IntVar>(l,Gecode::IRT_NQ,r);
00137 }
00138
00139 inline Gecode::MiniModel::LinRel<Gecode::IntVar>
00140 operator<(int l,
00141 const Gecode::MiniModel::LinExpr<Gecode::IntVar>& r) {
00142 return Gecode::MiniModel::LinRel<Gecode::IntVar>(l,Gecode::IRT_LE,r);
00143 }
00144 inline Gecode::MiniModel::LinRel<Gecode::IntVar>
00145 operator<(const Gecode::MiniModel::LinExpr<Gecode::IntVar>& l,
00146 int r) {
00147 return Gecode::MiniModel::LinRel<Gecode::IntVar>(l,Gecode::IRT_LE,r);
00148 }
00149 inline Gecode::MiniModel::LinRel<Gecode::IntVar>
00150 operator<(const Gecode::MiniModel::LinExpr<Gecode::IntVar>& l,
00151 const Gecode::MiniModel::LinExpr<Gecode::IntVar>& r) {
00152 return Gecode::MiniModel::LinRel<Gecode::IntVar>(l,Gecode::IRT_LE,r);
00153 }
00154
00155 inline Gecode::MiniModel::LinRel<Gecode::IntVar>
00156 operator<=(int l,
00157 const Gecode::MiniModel::LinExpr<Gecode::IntVar>& r) {
00158 return Gecode::MiniModel::LinRel<Gecode::IntVar>(l,Gecode::IRT_LQ,r);
00159 }
00160 inline Gecode::MiniModel::LinRel<Gecode::IntVar>
00161 operator<=(const Gecode::MiniModel::LinExpr<Gecode::IntVar>& l,
00162 int r) {
00163 return Gecode::MiniModel::LinRel<Gecode::IntVar>(l,Gecode::IRT_LQ,r);
00164 }
00165 inline Gecode::MiniModel::LinRel<Gecode::IntVar>
00166 operator<=(const Gecode::MiniModel::LinExpr<Gecode::IntVar>& l,
00167 const Gecode::MiniModel::LinExpr<Gecode::IntVar>& r) {
00168 return Gecode::MiniModel::LinRel<Gecode::IntVar>(l,Gecode::IRT_LQ,r);
00169 }
00170
00171 inline Gecode::MiniModel::LinRel<Gecode::IntVar>
00172 operator>(int l,
00173 const Gecode::MiniModel::LinExpr<Gecode::IntVar>& r) {
00174 return Gecode::MiniModel::LinRel<Gecode::IntVar>(l,Gecode::IRT_GR,r);
00175 }
00176 inline Gecode::MiniModel::LinRel<Gecode::IntVar>
00177 operator>(const Gecode::MiniModel::LinExpr<Gecode::IntVar>& l,
00178 int r) {
00179 return Gecode::MiniModel::LinRel<Gecode::IntVar>(l,Gecode::IRT_GR,r);
00180 }
00181 inline Gecode::MiniModel::LinRel<Gecode::IntVar>
00182 operator>(const Gecode::MiniModel::LinExpr<Gecode::IntVar>& l,
00183 const Gecode::MiniModel::LinExpr<Gecode::IntVar>& r) {
00184 return Gecode::MiniModel::LinRel<Gecode::IntVar>(l,Gecode::IRT_GR,r);
00185 }
00186
00187 inline Gecode::MiniModel::LinRel<Gecode::IntVar>
00188 operator>=(int l,
00189 const Gecode::MiniModel::LinExpr<Gecode::IntVar>& r) {
00190 return Gecode::MiniModel::LinRel<Gecode::IntVar>(l,Gecode::IRT_GQ,r);
00191 }
00192 inline Gecode::MiniModel::LinRel<Gecode::IntVar>
00193 operator>=(const Gecode::MiniModel::LinExpr<Gecode::IntVar>& l,
00194 int r) {
00195 return Gecode::MiniModel::LinRel<Gecode::IntVar>(l,Gecode::IRT_GQ,r);
00196 }
00197 inline Gecode::MiniModel::LinRel<Gecode::IntVar>
00198 operator>=(const Gecode::MiniModel::LinExpr<Gecode::IntVar>& l,
00199 const Gecode::MiniModel::LinExpr<Gecode::IntVar>& r) {
00200 return Gecode::MiniModel::LinRel<Gecode::IntVar>(l,Gecode::IRT_GQ,r);
00201 }
00202
00203
00204 inline Gecode::MiniModel::LinRel<Gecode::BoolVar>
00205 operator==(int l,
00206 const Gecode::MiniModel::LinExpr<Gecode::BoolVar>& r) {
00207 return Gecode::MiniModel::LinRel<Gecode::BoolVar>(l,Gecode::IRT_EQ,r);
00208 }
00209 inline Gecode::MiniModel::LinRel<Gecode::BoolVar>
00210 operator==(const Gecode::MiniModel::LinExpr<Gecode::BoolVar>& l,
00211 int r) {
00212 return Gecode::MiniModel::LinRel<Gecode::BoolVar>(l,Gecode::IRT_EQ,r);
00213 }
00214 inline Gecode::MiniModel::LinRel<Gecode::BoolVar>
00215 operator==(const Gecode::MiniModel::LinExpr<Gecode::BoolVar>& l,
00216 const Gecode::MiniModel::LinExpr<Gecode::BoolVar>& r) {
00217 return Gecode::MiniModel::LinRel<Gecode::BoolVar>(l,Gecode::IRT_EQ,r);
00218 }
00219
00220 inline Gecode::MiniModel::LinRel<Gecode::BoolVar>
00221 operator!=(int l,
00222 const Gecode::MiniModel::LinExpr<Gecode::BoolVar>& r) {
00223 return Gecode::MiniModel::LinRel<Gecode::BoolVar>(l,Gecode::IRT_NQ,r);
00224 }
00225 inline Gecode::MiniModel::LinRel<Gecode::BoolVar>
00226 operator!=(const Gecode::MiniModel::LinExpr<Gecode::BoolVar>& l,
00227 int r) {
00228 return Gecode::MiniModel::LinRel<Gecode::BoolVar>(l,Gecode::IRT_NQ,r);
00229 }
00230 inline Gecode::MiniModel::LinRel<Gecode::BoolVar>
00231 operator!=(const Gecode::MiniModel::LinExpr<Gecode::BoolVar>& l,
00232 const Gecode::MiniModel::LinExpr<Gecode::BoolVar>& r) {
00233 return Gecode::MiniModel::LinRel<Gecode::BoolVar>(l,Gecode::IRT_NQ,r);
00234 }
00235
00236 inline Gecode::MiniModel::LinRel<Gecode::BoolVar>
00237 operator<(int l,
00238 const Gecode::MiniModel::LinExpr<Gecode::BoolVar>& r) {
00239 return Gecode::MiniModel::LinRel<Gecode::BoolVar>(l,Gecode::IRT_LE,r);
00240 }
00241 inline Gecode::MiniModel::LinRel<Gecode::BoolVar>
00242 operator<(const Gecode::MiniModel::LinExpr<Gecode::BoolVar>& l,
00243 int r) {
00244 return Gecode::MiniModel::LinRel<Gecode::BoolVar>(l,Gecode::IRT_LE,r);
00245 }
00246 inline Gecode::MiniModel::LinRel<Gecode::BoolVar>
00247 operator<(const Gecode::MiniModel::LinExpr<Gecode::BoolVar>& l,
00248 const Gecode::MiniModel::LinExpr<Gecode::BoolVar>& r) {
00249 return Gecode::MiniModel::LinRel<Gecode::BoolVar>(l,Gecode::IRT_LE,r);
00250 }
00251
00252 inline Gecode::MiniModel::LinRel<Gecode::BoolVar>
00253 operator<=(int l,
00254 const Gecode::MiniModel::LinExpr<Gecode::BoolVar>& r) {
00255 return Gecode::MiniModel::LinRel<Gecode::BoolVar>(l,Gecode::IRT_LQ,r);
00256 }
00257 inline Gecode::MiniModel::LinRel<Gecode::BoolVar>
00258 operator<=(const Gecode::MiniModel::LinExpr<Gecode::BoolVar>& l,
00259 int r) {
00260 return Gecode::MiniModel::LinRel<Gecode::BoolVar>(l,Gecode::IRT_LQ,r);
00261 }
00262 inline Gecode::MiniModel::LinRel<Gecode::BoolVar>
00263 operator<=(const Gecode::MiniModel::LinExpr<Gecode::BoolVar>& l,
00264 const Gecode::MiniModel::LinExpr<Gecode::BoolVar>& r) {
00265 return Gecode::MiniModel::LinRel<Gecode::BoolVar>(l,Gecode::IRT_LQ,r);
00266 }
00267
00268 inline Gecode::MiniModel::LinRel<Gecode::BoolVar>
00269 operator>(int l,
00270 const Gecode::MiniModel::LinExpr<Gecode::BoolVar>& r) {
00271 return Gecode::MiniModel::LinRel<Gecode::BoolVar>(l,Gecode::IRT_GR,r);
00272 }
00273 inline Gecode::MiniModel::LinRel<Gecode::BoolVar>
00274 operator>(const Gecode::MiniModel::LinExpr<Gecode::BoolVar>& l,
00275 int r) {
00276 return Gecode::MiniModel::LinRel<Gecode::BoolVar>(l,Gecode::IRT_GR,r);
00277 }
00278 inline Gecode::MiniModel::LinRel<Gecode::BoolVar>
00279 operator>(const Gecode::MiniModel::LinExpr<Gecode::BoolVar>& l,
00280 const Gecode::MiniModel::LinExpr<Gecode::BoolVar>& r) {
00281 return Gecode::MiniModel::LinRel<Gecode::BoolVar>(l,Gecode::IRT_GR,r);
00282 }
00283
00284 inline Gecode::MiniModel::LinRel<Gecode::BoolVar>
00285 operator>=(int l,
00286 const Gecode::MiniModel::LinExpr<Gecode::BoolVar>& r) {
00287 return Gecode::MiniModel::LinRel<Gecode::BoolVar>(l,Gecode::IRT_GQ,r);
00288 }
00289 inline Gecode::MiniModel::LinRel<Gecode::BoolVar>
00290 operator>=(const Gecode::MiniModel::LinExpr<Gecode::BoolVar>& l,
00291 int r) {
00292 return Gecode::MiniModel::LinRel<Gecode::BoolVar>(l,Gecode::IRT_GQ,r);
00293 }
00294 inline Gecode::MiniModel::LinRel<Gecode::BoolVar>
00295 operator>=(const Gecode::MiniModel::LinExpr<Gecode::BoolVar>& l,
00296 const Gecode::MiniModel::LinExpr<Gecode::BoolVar>& r) {
00297 return Gecode::MiniModel::LinRel<Gecode::BoolVar>(l,Gecode::IRT_GQ,r);
00298 }
00299
00300
00301 namespace Gecode {
00302
00303
00304
00305
00306
00307
00308 template<class Var>
00309 forceinline void
00310 post(Space* home, const MiniModel::LinRel<Var>& r,
00311 IntConLevel icl, PropKind pk) {
00312 if (home->failed()) return;
00313 r.post(home,true,icl,pk);
00314 }
00315 forceinline void
00316 post(Space* home, bool r, IntConLevel, PropKind) {
00317 if (home->failed()) return;
00318 if (!r)
00319 home->fail();
00320 }
00321
00322 }
00323
00324