From 01a8b038c2df9f44b469b161f8ef8843a37f953c Mon Sep 17 00:00:00 2001 From: Nicolas Voirol <voirol.nicolas@gmail.com> Date: Sun, 7 Aug 2016 19:05:36 +0200 Subject: [PATCH] Solver package (implicit timeoutSolver wrapper) --- .../{ => combinators}/TimeoutSolver.scala | 1 + .../TimeoutSolverFactory.scala | 1 + src/main/scala/inox/solvers/package.scala | 29 ++++++++++++------- 3 files changed, 21 insertions(+), 10 deletions(-) rename src/main/scala/inox/solvers/{ => combinators}/TimeoutSolver.scala (98%) rename src/main/scala/inox/solvers/{ => combinators}/TimeoutSolverFactory.scala (96%) diff --git a/src/main/scala/inox/solvers/TimeoutSolver.scala b/src/main/scala/inox/solvers/combinators/TimeoutSolver.scala similarity index 98% rename from src/main/scala/inox/solvers/TimeoutSolver.scala rename to src/main/scala/inox/solvers/combinators/TimeoutSolver.scala index 17ae644b5..4c74587a0 100644 --- a/src/main/scala/inox/solvers/TimeoutSolver.scala +++ b/src/main/scala/inox/solvers/combinators/TimeoutSolver.scala @@ -2,6 +2,7 @@ package inox package solvers +package combinators import utils._ import scala.concurrent.duration._ diff --git a/src/main/scala/inox/solvers/TimeoutSolverFactory.scala b/src/main/scala/inox/solvers/combinators/TimeoutSolverFactory.scala similarity index 96% rename from src/main/scala/inox/solvers/TimeoutSolverFactory.scala rename to src/main/scala/inox/solvers/combinators/TimeoutSolverFactory.scala index b45e5bffa..0c20fddc9 100644 --- a/src/main/scala/inox/solvers/TimeoutSolverFactory.scala +++ b/src/main/scala/inox/solvers/combinators/TimeoutSolverFactory.scala @@ -2,6 +2,7 @@ package inox package solvers +package combinators import scala.reflect.runtime.universe._ diff --git a/src/main/scala/inox/solvers/package.scala b/src/main/scala/inox/solvers/package.scala index 34215c07e..2fcab5aba 100644 --- a/src/main/scala/inox/solvers/package.scala +++ b/src/main/scala/inox/solvers/package.scala @@ -1,22 +1,31 @@ /* Copyright 2009-2016 EPFL, Lausanne */ -package leon +package inox -import scala.reflect.runtime.universe._ import scala.concurrent.duration._ package object solvers { - implicit class TimeoutableSolverFactory[+S <: TimeoutSolver : TypeTag](val sf: SolverFactory[S]) { - def withTimeout(to: Long): TimeoutSolverFactory[S] = { - sf match { - case tsf: TimeoutSolverFactory[_] => - new TimeoutSolverFactory[S](tsf.sf, to) - case _ => - new TimeoutSolverFactory[S](sf, to) + import combinators._ + + implicit class TimeoutableSolverFactory[S1 <: TimeoutSolver](val sf: SolverFactory { type S = S1 }) { + def withTimeout(timeout: Long): TimeoutSolverFactory { type S <: S1 } = { + val innerFactory = (sf match { + case tsf: TimeoutSolverFactory => tsf.factory + case _ => sf + }).asInstanceOf[SolverFactory { + val program: sf.program.type + type S = S1 { val program: sf.program.type } + }] + + new TimeoutSolverFactory { + val program: sf.program.type = sf.program + type S = S1 { val program: sf.program.type } + val to = timeout + val factory = innerFactory } } - def withTimeout(du: Duration): TimeoutSolverFactory[S] = { + def withTimeout(du: Duration): TimeoutSolverFactory { type S <: S1 } = { withTimeout(du.toMillis) } } -- GitLab