diff options
Diffstat (limited to 'core/source/main/scala/com/rockymadden/stringmetric/Algorithm.scala')
-rwxr-xr-x | core/source/main/scala/com/rockymadden/stringmetric/Algorithm.scala | 15 |
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) + } + } } |