- if (r.getInclusion() instanceof SetInclusion) {
- if (ar.getDescriptor()==((SetInclusion)r.getInclusion()).getSet()) {
- //Generate add instruction
- DNFRule dnfrule=r.getDNFGuardExpr();
- for(int j=0;j<dnfrule.size();j++) {
- Inclusion inc=r.getInclusion();
- UpdateNode un=new UpdateNode();
- /* First solve for quantifiers */
- boolean goodupdate=true;
- for(Iterator iterator=r.quantifiers();iterator.hasNext();) {
- Quantifier q=(Quantifier)iterator.next();
- boolean foundall=true;
- if ((q instanceof SetQuantifier)||(q instanceof ForQuantifier)) {
- VarDescriptor vd=null;
- SetDescriptor set=null;
- if (q instanceof SetQuantifier) {
- vd=((SetQuantifier)q).getVar();
- } else
- vd=((ForQuantifier)q).getVar();
- if(inc instanceof SetInclusion) {
- SetInclusion si=(SetInclusion)inc;
- if ((si.elementexpr instanceof VarExpr)&&
- (((VarExpr)si.elementexpr).getVar()==vd)) {
- /* Can solve for v */
- Binding binding=new Binding(vd,0);
- un.addBinding(binding);
- } else
- foundall=false;
- } else if (inc instanceof RelationInclusion) {
- RelationInclusion ri=(RelationInclusion)inc;
- boolean f1=true;
- boolean f2=true;
- if ((ri.getLeftExpr() instanceof VarExpr)&&
- (((VarExpr)ri.getLeftExpr()).getVar()==vd)) {
- /* Can solve for v */
- Binding binding=new Binding(vd,0);
- un.addBinding(binding);
- } else f1=false;
- if ((ri.getRightExpr() instanceof VarExpr)&&
- (((VarExpr)ri.getRightExpr()).getVar()==vd)) {
- /* Can solve for v */
- Binding binding=new Binding(vd,0);
- un.addBinding(binding);
- } else f2=false;
- if (!(f1||f2))
- foundall=false;
- } else throw new Error("Inclusion not recognized");
- } else if (q instanceof RelationQuantifier) {
- RelationQuantifier rq=(RelationQuantifier)q;
- for(int k=0;k<2;k++) {
- VarDescriptor vd=(k==0)?rq.x:rq.y;
- if(inc instanceof SetInclusion) {
- SetInclusion si=(SetInclusion)inc;
- if ((si.elementexpr instanceof VarExpr)&&
- (((VarExpr)si.elementexpr).getVar()==vd)) {
- /* Can solve for v */
- Binding binding=new Binding(vd,0);
- un.addBinding(binding);
- } else
- foundall=false;
- } else if (inc instanceof RelationInclusion) {
- RelationInclusion ri=(RelationInclusion)inc;
- boolean f1=true;
- boolean f2=true;
- if ((ri.getLeftExpr() instanceof VarExpr)&&
- (((VarExpr)ri.getLeftExpr()).getVar()==vd)) {
- /* Can solve for v */
- Binding binding=new Binding(vd,0);
- un.addBinding(binding);
- } else f1=false;
- if ((ri.getRightExpr() instanceof VarExpr)&&
- (((VarExpr)ri.getRightExpr()).getVar()==vd)) {
- /* Can solve for v */
- Binding binding=new Binding(vd,0);
- un.addBinding(binding);
- } else f2=false;
- if (!(f1||f2))
- foundall=false;
- } else throw new Error("Inclusion not recognized");
- }
- } else throw new Error("Quantifier not recognized");
- if (!foundall) {
- goodupdate=false;
- break;
+ /* See if this is a good rule*/
+ System.out.println(r.getGuardExpr().name());
+ if ((r.getInclusion() instanceof SetInclusion&&
+ ar.getDescriptor()==((SetInclusion)r.getInclusion()).getSet())||
+ (r.getInclusion() instanceof RelationInclusion&&
+ ar.getDescriptor()==((RelationInclusion)r.getInclusion()).getRelation())) {
+
+ /* First solve for quantifiers */
+ Vector bindings=new Vector();
+ /* Construct bindings */
+ System.out.println("Attempting to generate add to set: #2");
+ if (!constructbindings(bindings,r,false))
+ continue;
+ System.out.println("Attempting to generate add to set: #3");
+ //Generate add instruction
+ DNFRule dnfrule=r.getDNFGuardExpr();
+ for(int j=0;j<dnfrule.size();j++) {
+ Inclusion inc=r.getInclusion();
+ UpdateNode un=new UpdateNode();
+ un.addBindings(bindings);
+ /* Now build update for tuple/set inclusion condition */
+ if(inc instanceof SetInclusion) {
+ SetInclusion si=(SetInclusion)inc;
+ if (!(si.elementexpr instanceof VarExpr)) {
+ Updates up=new Updates(si.elementexpr,0);
+ un.addUpdate(up);
+ } else {
+ VarDescriptor vd=((VarExpr)si.elementexpr).getVar();
+ if (un.getBinding(vd)==null) {
+ Updates up=new Updates(si.elementexpr,0);
+ un.addUpdate(up);