package FVisitor;

public class ConditionalComp <TVis1 extends FVisitor, 
							  TVis2 extends FVisitor> extends FVisitor{
	public TVis1 vis1;
	public TVis2 vis2;
	public ConditionalComp(TVis1 v1, TVis2 v2){ vis1 = v1; vis2 = v2; }
	public FVisitor before(Object o, FVisitor comp){ return before(o,(ConditionalComp)comp); }
	public FVisitor after(Object o, FVisitor comp){ return after(o,(ConditionalComp)comp); }
	public ConditionalComp before(Object o, ConditionalComp v){
		FVisitor tvis = vis1.before(o, v.vis1);
		FVisitor newVis2 = v.vis2;
		if(tvis.continueVisit())newVis2 = vis2.before(o, v.vis2);
		return new ConditionalComp((TVis1)tvis, (TVis2)newVis2); 
	}
	public ConditionalComp after(Object o, ConditionalComp v){
		FVisitor tvis = (FVisitor)vis1.after(o, v.vis1);
		FVisitor newVis2 = v.vis2;
		if(tvis.continueVisit())newVis2 = vis2.after(o, v.vis2);
		return new ConditionalComp((TVis1)tvis, (TVis2)newVis2); 
	}
	public boolean continueVisit() { return exportVisitor().continueVisit(); }
	
	public String toString(){ return "{"+vis1+", "+vis2+"}"; }
}

