summaryrefslogtreecommitdiff
path: root/core/source/main/scala/com/rockymadden/stringmetric/Algorithm.scala
diff options
context:
space:
mode:
Diffstat (limited to 'core/source/main/scala/com/rockymadden/stringmetric/Algorithm.scala')
-rwxr-xr-xcore/source/main/scala/com/rockymadden/stringmetric/Algorithm.scala15
1 files changed, 15 insertions, 0 deletions
diff --git a/core/source/main/scala/com/rockymadden/stringmetric/Algorithm.scala b/core/source/main/scala/com/rockymadden/stringmetric/Algorithm.scala
index 79821bd..dd810b8 100755
--- a/core/source/main/scala/com/rockymadden/stringmetric/Algorithm.scala
+++ b/core/source/main/scala/com/rockymadden/stringmetric/Algorithm.scala
@@ -1,6 +1,9 @@
package com.rockymadden.stringmetric
object Algorithm {
+ import com.rockymadden.stringmetric.Transform.StringTransform
+
+
trait Algorithm[A] {
def compute(a: A): Option[A]
}
@@ -28,4 +31,16 @@ object Algorithm {
def computeWithSoundex(a: Array[Char]) = Soundex.compute(a)
}
+
+
+ final class StringAlgorithmDecorator(val sa: StringAlgorithm) {
+ val withTransform: (StringTransform => StringAlgorithm) = (st) => new StringAlgorithm {
+ private[this] val self: StringAlgorithm = sa
+ private[this] val transform: StringTransform = st
+
+ override def compute(a: Array[Char]): Option[Array[Char]] = self.compute(transform(a))
+
+ override def compute(a: String): Option[String] = self.compute(transform(a.toCharArray)).map(_.mkString)
+ }
+ }
}