summaryrefslogtreecommitdiff
path: root/core/src/main/scala/com/rockymadden/stringmetric/Algorithm.scala
diff options
context:
space:
mode:
Diffstat (limited to 'core/src/main/scala/com/rockymadden/stringmetric/Algorithm.scala')
-rwxr-xr-xcore/src/main/scala/com/rockymadden/stringmetric/Algorithm.scala21
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