diff options
Diffstat (limited to 'core/src/main/scala/com/rockymadden/stringmetric/Algorithm.scala')
-rwxr-xr-x | core/src/main/scala/com/rockymadden/stringmetric/Algorithm.scala | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/core/src/main/scala/com/rockymadden/stringmetric/Algorithm.scala b/core/src/main/scala/com/rockymadden/stringmetric/Algorithm.scala index 1200926..a6d6d6e 100755 --- a/core/src/main/scala/com/rockymadden/stringmetric/Algorithm.scala +++ b/core/src/main/scala/com/rockymadden/stringmetric/Algorithm.scala @@ -2,7 +2,7 @@ package com.rockymadden.stringmetric object Algorithm { import scala.collection.immutable.Map - import Transform.StringTransform + import Transform._ trait Algorithm[A] { @@ -10,6 +10,12 @@ object Algorithm { } + object Algorithm { + implicit def stringAlgorithmToDecorated(sa: StringAlgorithm): StringAlgorithmDecorator = + new StringAlgorithmDecorator(sa) + } + + trait StringAlgorithm extends Algorithm[Array[Char]] { def compute(a: String): Option[String] } @@ -34,8 +40,15 @@ object Algorithm { } - final class StringAlgorithmDecorator(val sa: StringAlgorithm) { - val withMemoization: StringAlgorithm = new StringAlgorithm { + trait AlgorithmDecorator[A] { + val withMemoization: Algorithm[A] + + val withTransform: (Transform[A] => Algorithm[A]) + } + + + final case class StringAlgorithmDecorator(sa: StringAlgorithm) extends AlgorithmDecorator[Array[Char]] { + override val withMemoization: StringAlgorithm = new StringAlgorithm { private val base: StringAlgorithm = sa private var memo: Map[String, Option[String]] = Map() @@ -50,7 +63,7 @@ object Algorithm { } } - val withTransform: (StringTransform => StringAlgorithm) = (st) => new StringAlgorithm { + override val withTransform: (StringTransform => StringAlgorithm) = (st) => new StringAlgorithm { private val base: StringAlgorithm = sa private val transform: StringTransform = st |