advent-of-code/2019/Scala/kamlib/Wrapper.scala

30 lines
714 B
Scala
Raw Normal View History

2019-12-06 22:10:37 +01:00
package kamlib
/** Wraps a function, measures the execution time, provides the result and time*/
class Wrapper[A](function: => A)
{
/** Saved results */
2019-12-09 11:03:21 +01:00
val tuple: (A, Double) = wrap(function)
2019-12-06 22:10:37 +01:00
/** Time measurement */
2019-12-09 11:03:21 +01:00
private[this] def wrap[A](function: => A): (A, Double) =
2019-12-06 22:10:37 +01:00
{
2019-12-09 11:03:21 +01:00
val evalStart = System.nanoTime()
2019-12-06 22:10:37 +01:00
val result = function
2019-12-09 11:03:21 +01:00
val evalEnd = System.nanoTime()
(result, ((evalEnd-evalStart)/100).toDouble/10000)
2019-12-06 22:10:37 +01:00
}
def print(): Unit =
{
println(s"Result: ${tuple._1} | Time: ${tuple._2}ms")
}
def result: A = tuple._1
2019-12-09 11:03:21 +01:00
def time: Double = tuple._2
2019-12-06 22:10:37 +01:00
}
object Wrapper
{
def apply[A](function: => A): Wrapper[A] = new Wrapper[A](function)
}