Skip to content
Snippets Groups Projects
Commit 988fbcd3 authored by Nicolas Voirol's avatar Nicolas Voirol
Browse files

Timeout solvers

parent fa48a804
No related branches found
No related tags found
No related merge requests found
...@@ -16,7 +16,7 @@ trait SolverFactory { ...@@ -16,7 +16,7 @@ trait SolverFactory {
def shutdown(): Unit = {} def shutdown(): Unit = {}
def reclaim(s: Solver) { def reclaim(s: S) {
s.free() s.free()
} }
} }
......
/* Copyright 2009-2016 EPFL, Lausanne */ /* Copyright 2009-2016 EPFL, Lausanne */
package leon package inox
package solvers package solvers
import utils._ import utils._
import purescala.Expressions.Expr
import scala.concurrent.duration._ import scala.concurrent.duration._
trait TimeoutSolver extends Solver { trait TimeoutSolver extends Solver {
import program.trees._
val ti = new TimeoutFor(this) val ti = new TimeoutFor(this)
...@@ -24,25 +23,26 @@ trait TimeoutSolver extends Solver { ...@@ -24,25 +23,26 @@ trait TimeoutSolver extends Solver {
this this
} }
abstract override def check: Option[Boolean] = { abstract override def check[R](config: Configuration { type Response <: R }): R = {
optTimeout match { optTimeout match {
case Some(to) => case Some(to) =>
ti.interruptAfter(to) { ti.interruptAfter(to) {
super.check super.check(config)
} }
case None => case None =>
super.check super.check(config)
} }
} }
abstract override def checkAssumptions(assumptions: Set[Expr]): Option[Boolean] = { abstract override def checkAssumptions[R](config: Configuration { type Response <: R })
(assumptions: Set[Expr]): R = {
optTimeout match { optTimeout match {
case Some(to) => case Some(to) =>
ti.interruptAfter(to) { ti.interruptAfter(to) {
super.checkAssumptions(assumptions) super.checkAssumptions(config)(assumptions)
} }
case None => case None =>
super.checkAssumptions(assumptions) super.checkAssumptions(config)(assumptions)
} }
} }
......
/* Copyright 2009-2016 EPFL, Lausanne */ /* Copyright 2009-2016 EPFL, Lausanne */
package leon package inox
package solvers package solvers
import scala.reflect.runtime.universe._ import scala.reflect.runtime.universe._
class TimeoutSolverFactory[+S <: TimeoutSolver : TypeTag](val sf: SolverFactory[S], to: Long) extends SolverFactory[S] { trait TimeoutSolverFactory extends SolverFactory {
override def getNewSolver() = sf.getNewSolver().setTimeout(to) type S <: TimeoutSolver { val program: TimeoutSolverFactory.this.program.type }
override val name = sf.name+" with t.o" val factory: SolverFactory {
val program: TimeoutSolverFactory.this.program.type
type S = TimeoutSolverFactory.this.S
}
override def reclaim(s: Solver) = sf.reclaim(s) val to: Long
override def shutdown() = sf.shutdown() override def getNewSolver() = factory.getNewSolver().setTimeout(to)
override val name = factory.name+" with t.o"
override def reclaim(s: S) = factory.reclaim(s)
override def shutdown() = factory.shutdown()
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment