//===-- TimingSolver.h ------------------------------------------*- C++ -*-===// // // The KLEE Symbolic Virtual Machine // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// #ifndef KLEE_TIMINGSOLVER_H #define KLEE_TIMINGSOLVER_H #include "klee/Expr.h" #include "klee/Solver.h" #include "klee/Internal/System/Time.h" #include namespace klee { class ExecutionState; class Solver; /// TimingSolver - A simple class which wraps a solver and handles /// tracking the statistics that we care about. class TimingSolver { public: Solver *solver; bool simplifyExprs; public: /// TimingSolver - Construct a new timing solver. /// /// \param _simplifyExprs - Whether expressions should be /// simplified (via the constraint manager interface) prior to /// querying. TimingSolver(Solver *_solver, bool _simplifyExprs = true) : solver(_solver), simplifyExprs(_simplifyExprs) {} ~TimingSolver() { delete solver; } void setTimeout(time::Span t) { solver->setCoreSolverTimeout(t); } char *getConstraintLog(const Query& query) { return solver->getConstraintLog(query); } bool evaluate(const ExecutionState&, ref, Solver::Validity &result); bool mustBeTrue(const ExecutionState&, ref, bool &result); bool mustBeFalse(const ExecutionState&, ref, bool &result); bool mayBeTrue(const ExecutionState&, ref, bool &result); bool mayBeFalse(const ExecutionState&, ref, bool &result); bool getValue(const ExecutionState &, ref expr, ref &result); bool getInitialValues(const ExecutionState&, const std::vector &objects, std::vector< std::vector > &result); std::pair< ref, ref > getRange(const ExecutionState&, ref query); }; } #endif