00001 00005 package edu.mit.csail.sdg.squander.engine; 00006 00007 import java.util.Iterator; 00008 00009 import edu.mit.csail.sdg.squander.absstate.ObjTupleSet; 00010 import edu.mit.csail.sdg.squander.engine.ISquanderResult.IEvaluator; 00011 import forge.program.ForgeExpression; 00012 import forge.program.ForgeVariable; 00013 import forge.solve.ForgeConstant; 00014 import forge.solve.ForgeSolution; 00015 00021 public class ForgeEval implements ISquanderResult.IEvaluator { 00022 private Iterator<ForgeSolution> solutions; 00023 private ForgeSolution solution; 00024 private ForgeConverter fconv; 00025 00026 public ForgeEval(Iterator<ForgeSolution> solutions, ForgeConverter fconv) { 00027 this.solutions = solutions; 00028 this.solution = solutions.next(); 00029 this.fconv = fconv; 00030 } 00031 00032 @Override 00033 public ObjTupleSet evaluate(ForgeVariable var) { 00034 return evaluateExpr(var); 00035 } 00036 00037 public ObjTupleSet evaluateExpr(ForgeExpression expr) { 00038 ForgeConstant fc = solution.trace().evaluate(expr); 00039 return ObjTupleSet.convertFrom(fc, fconv); 00040 } 00041 00042 @Override 00043 public boolean hasSolution() { 00044 return solution != null && solution.trace() != null; 00045 } 00046 00047 @Override 00048 public IEvaluator nextSolution() { 00049 if (solutions.hasNext()) 00050 solution = solutions.next(); 00051 else 00052 solution = null; 00053 return this; 00054 } 00055 00056 @Override 00057 public String unsatCore() { 00058 return "unknown"; 00059 } 00060 00061 @Override 00062 public String trace() { 00063 return solution.trace().toString(); 00064 } 00065 00066 @Override 00067 public String stats() { 00068 return "unknown stats"; 00069 } 00070 00071 }