package cute.concolic.pathconstraint;
import cute.concolic.logging.Logger;
import cute.concolic.logging.Printable;
import cute.concolic.symbolicstate.ArithmeticExpression;
import cute.concolic.Information;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.Vector;
/**
* Author: Koushik Sen <ksen@cs.uiuc.edu>
*/
public class PathConstraint implements Printable {
private Logger logger;
private Information information;
private Vector pathc;
private Vector otherBranchTaken;
public PathConstraint(Logger logger, Information information) {
this.logger = logger;
this.information = information;
pathc = new Vector();
otherBranchTaken = new Vector();
}
public void add(Constraint c,boolean isOtherBranchTaken) {
pathc.add(c);
// if(c instanceof ArithmeticExpression){
// ((ArithmeticExpression)c).checkValidity();
// }
otherBranchTaken.add(new Boolean(isOtherBranchTaken));
if((information.debugLevel&32)!=0) logger.info(32,null,this);
}
public void print(PrintWriter out){
int count=0;
out.println("-------------------");
for (Iterator iterator = pathc.iterator(); iterator.hasNext();) {
count++;
out.print(count-1);
out.print(" : ");
Constraint constraint = (Constraint) iterator.next();
if(constraint==null){
out.println("null");
} else {
constraint.printConstraint(out);
}
}
out.println("-------------------");
out.flush();
}
public int size() {
return pathc.size();
}
public boolean isOtherBranchTaken(int k){
Boolean b = (Boolean)otherBranchTaken.get(k);
return b.booleanValue();
}
public ArithmeticExpression getArith(int k) {
Constraint c = (Constraint)pathc.get(k);
if(c==null) return null;
if(c instanceof ArithmeticExpression) return (ArithmeticExpression)c;
else return null;
}
public PointerConstraint getPointer(int k) {
Constraint c = (Constraint)pathc.get(k);
if(c==null) return null;
if(c instanceof PointerConstraint) return (PointerConstraint)c;
else return null;
}
public ScheduleConstraint getSchedule(int k) {
Constraint c = (Constraint)pathc.get(k);
if(c==null) return null;
if(c instanceof ScheduleConstraint) return (ScheduleConstraint)c;
else return null;
}
public DSchedule getDSchedule(int k) {
Constraint c = (Constraint)pathc.get(k);
if(c==null) return null;
if(c instanceof DSchedule) return (DSchedule)c;
else return null;
}
}