package cute.concolic.symbolicexecution;
import cute.concolic.symbolicstate.State;
import cute.concolic.pathconstraint.PathConstraint;
import cute.concolic.logging.BranchCoverageLog;
import cute.concolic.input.InputMap;
import java.util.IdentityHashMap;
/**
* Author: Koushik Sen <ksen@cs.uiuc.edu>
*/
public class ComputationStacks {
private State state;
private PathConstraint path;
private BranchHistory history;
private BranchCoverageLog coverage;
private InputMap input;
private IdentityHashMap localCS;
public ComputationStacks(State state, PathConstraint path, BranchHistory history, BranchCoverageLog coverage,InputMap input) {
this.state = state;
this.path = path;
this.history = history;
this.coverage = coverage;
this.input = input;
localCS = new IdentityHashMap();
}
private synchronized ComputationStack getStack(){
Thread t = Thread.currentThread();
ComputationStack cs = (ComputationStack)localCS.get(t);
if(cs==null){
cs = new ComputationStack(state,path,history,coverage,input);
localCS.put(t,cs);
}
return cs;
}
public void push(long adr){
getStack().push(adr);
}
public void setReturn(long adr){
getStack().setReturn(adr);
}
public void loadAddress(long adr){
getStack().loadAddress(adr);
}
public void loadValue(double val){
getStack().loadValue(val);
}
public void loadValueLong(long val){
getStack().loadValueLong(val);
}
public void pushValue(Object o) {
getStack().pushValue(o);
}
public void popAll(){
getStack().popAll();
}
public void applyOp(String op){
getStack().applyOp(op);
}
public void funBegin(String fname){
getStack().funBegin(fname);
}
public void funEnd(){
getStack().funEnd();
}
public void pop(long addr){
getStack().pop(addr);
}
public void storeReturn(long addr){
getStack().storeReturn(addr);
}
public void store(long addr){
getStack().store(addr);
}
public void branch(boolean pos,String fname,int bid,int bCount){
getStack().branch(pos,fname,bid ,bCount);
}
}