Generated on Fri Oct 6 16:26:44 2006 for Gecode/J by doxygen 1.4.7

Expr.java

Go to the documentation of this file.
00001 /*
00002  *  Main authors:
00003  *     Mikael Lagerkvist <lagerkvist@gecode.org>
00004  *
00005  *  Copyright:
00006  *     Mikael Lagerkvist, 2006
00007  *
00008  *  Last modified:
00009  *     $Date: 2006-09-11 17:06:50 +0200 (Mon, 11 Sep 2006) $ by $Author: zayenz $
00010  *     $Revision: 3650 $
00011  *
00012  *  This file is part of Gecode, the generic constraint
00013  *  development environment:
00014  *     http://www.gecode.org
00015  *
00016  *  See the file "LICENSE" for information on usage and
00017  *  redistribution of this file, and for a
00018  *     DISCLAIMER OF ALL WARRANTIES.
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     //  Convenience methods
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     //  Debug methods
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     //  Package methods
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 }