Expr.java
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 package org.gecode;
00023
00024 import java.util.ArrayList;
00025
00035 public class Expr {
00036 int d;
00037 ArrayList<Integer> cs;
00038 ArrayList<IntVar> vs;
00039 ArrayList<Integer> cbs;
00040 ArrayList<BExpr> vbs;
00041
00044 public Expr() {
00045 d = 0;
00046 cs = new ArrayList<Integer>();
00047 vs = new ArrayList<IntVar>();
00048 cbs = new ArrayList<Integer>();
00049 vbs = new ArrayList<BExpr>();
00050 }
00051
00054 public Expr(Expr e) {
00055 d = e.d;
00056 cs = new ArrayList<Integer>(e.cs);
00057 vs = new ArrayList<IntVar>(e.vs);
00058 cbs = new ArrayList<Integer>(e.cbs);
00059 vbs = new ArrayList<BExpr>(e.vbs);
00060 }
00061
00064 public Expr(int c, IntVar v) {
00065 d = 0;
00066 cs = new ArrayList<Integer>(); cs.add(c);
00067 vs = new ArrayList<IntVar>(); vs.add(v);
00068 cbs = new ArrayList<Integer>();
00069 vbs = new ArrayList<BExpr>();
00070 }
00071
00074 public Expr(IntVar v) {
00075 d = 0;
00076 cs = new ArrayList<Integer>(); cs.add(1);
00077 vs = new ArrayList<IntVar>(); vs.add(v);
00078 cbs = new ArrayList<Integer>();
00079 vbs = new ArrayList<BExpr>();
00080 }
00081
00084 public Expr(int d) {
00085 this.d = d;
00086 cs = new ArrayList<Integer>();
00087 vs = new ArrayList<IntVar>();
00088 cbs = new ArrayList<Integer>();
00089 vbs = new ArrayList<BExpr>();
00090 }
00091
00094 public Expr(int c, BExpr b) {
00095 this.d = 0;
00096 cs = new ArrayList<Integer>();
00097 vs = new ArrayList<IntVar>();
00098 cbs = new ArrayList<Integer>(); cbs.add(c);
00099 vbs = new ArrayList<BExpr>(); vbs.add(b);
00100 }
00101
00104 public Expr(BExpr b) {
00105 this.d = 0;
00106 cs = new ArrayList<Integer>();
00107 vs = new ArrayList<IntVar>();
00108 cbs = new ArrayList<Integer>(); cbs.add(1);
00109 vbs = new ArrayList<BExpr>(); vbs.add(b);
00110 }
00111
00114 public Expr plus(int c, IntVar v) {
00115 cs.add(c);
00116 vs.add(v);
00117 return this;
00118 }
00119
00122 public Expr minus(int c, IntVar v) {
00123 cs.add(-c);
00124 vs.add(v);
00125 return this;
00126 }
00127
00130 public Expr plus(int c) {
00131 d += c;
00132 return this;
00133 }
00134
00137 public Expr minus(int c) {
00138 d -= c;
00139 return this;
00140 }
00141
00144 public Expr plus(Expr e) {
00145 cs.addAll(e.cs);
00146 vs.addAll(e.vs);
00147 cbs.addAll(e.cbs);
00148 vbs.addAll(e.vbs);
00149 d += e.d;
00150 return this;
00151 }
00152
00155 public Expr minus(Expr e) {
00156 for (int i: e.cs)
00157 cs.add(-i);
00158 for (int i: e.cbs)
00159 cbs.add(-i);
00160 vs.addAll(e.vs);
00161 vbs.addAll(e.vbs);
00162 d -= e.d;
00163 return this;
00164 }
00165
00168 public Expr plus(int c, BExpr b) {
00169 cbs.add(c);
00170 vbs.add(b);
00171 return this;
00172 }
00173
00176 public Expr minus(int c, BExpr b) {
00177 cbs.add(-c);
00178 vbs.add(b);
00179 return this;
00180 }
00181
00183
00185
00188 public Expr plus(IntVar v) {
00189 return plus(1, v);
00190 }
00191
00194 public Expr minus(IntVar v) {
00195 return minus(1, v);
00196 }
00197
00200 public Expr plus(BExpr b) {
00201 return plus(1, b);
00202 }
00203
00206 public Expr minus(BExpr b) {
00207 return minus(1, b);
00208 }
00209
00210
00213 public Expr p(int c, IntVar v) {
00214 return plus(c, v);
00215 }
00216
00219 public Expr m(int c, IntVar v) {
00220 return minus(c, v);
00221 }
00222
00225 public Expr p(IntVar v) {
00226 return plus(1, v);
00227 }
00228
00231 public Expr m(IntVar v) {
00232 return minus(1, v);
00233 }
00234
00237 public Expr p(int c) {
00238 return plus(c);
00239 }
00240
00243 public Expr m(int c) {
00244 return minus(c);
00245 }
00246
00249 public Expr p(Expr e) {
00250 return plus(e);
00251 }
00252
00255 public Expr m(Expr e) {
00256 return minus(e);
00257 }
00258
00259
00262 public Expr p(int c, BExpr b) {
00263 return plus(c, b);
00264 }
00265
00268 public Expr m(int c, BExpr b) {
00269 return minus(c, b);
00270 }
00271
00274 public Expr p(BExpr b) {
00275 return plus(1, b);
00276 }
00277
00280 public Expr m(BExpr b) {
00281 return minus(1, b);
00282 }
00283
00285
00287 public String toString() {
00288 String res = "";
00289 for (int i = 0; i < cs.size(); ++i) {
00290 int c = cs.get(i);
00291 if (c == 0) continue;
00292 res += (i==0?"":
00293 ((i<0)?" - ":" + "));
00294 if (Math.abs(c) != 1) res += "" + c + "*";
00295 res += "" + vs.get(i).getName() + vs.get(i);
00296 }
00297 if (d != 0 || res.equals(""))
00298 res += (res.equals("")?"":" + ") + d;
00299 return res;
00300 }
00301
00303
00305 void clear_bexpr(Space home) {
00306 for (int i = 0; i < cbs.size(); ++i) {
00307 cs.add(cbs.get(i));
00308 vs.add(vbs.get(i).e.post(home));
00309 }
00310 cbs.clear(); vbs.clear();
00311 }
00312 }