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.scala46
1 files changed, 46 insertions, 0 deletions
diff --git a/core/src/main/scala/com/rockymadden/stringmetric/Algorithm.scala b/core/src/main/scala/com/rockymadden/stringmetric/Algorithm.scala
new file mode 100755
index 0000000..84f136d
--- /dev/null
+++ b/core/src/main/scala/com/rockymadden/stringmetric/Algorithm.scala
@@ -0,0 +1,46 @@
+package com.rockymadden.stringmetric
+
+object Algorithm {
+ import Transform.StringTransform
+
+
+ trait Algorithm[A] {
+ def compute(a: A): Option[A]
+ }
+
+
+ trait StringAlgorithm extends Algorithm[Array[Char]] {
+ def compute(a: String): Option[String]
+ }
+
+
+ object StringAlgorithm {
+ final val Metaphone = phonetic.MetaphoneAlgorithm
+ final val Nysiis = phonetic.NysiisAlgorithm
+ final val RefinedNysiis = phonetic.RefinedNysiisAlgorithm
+ final val RefinedSoundex = phonetic.RefinedSoundexAlgorithm
+ final val Soundex = phonetic.SoundexAlgorithm
+
+ def computeWithMetaphone(a: Array[Char]) = Metaphone.compute(a)
+
+ def computeWithNysiis(a: Array[Char]) = Nysiis.compute(a)
+
+ def computeWithRefinedNysiis(a: Array[Char]) = RefinedNysiis.compute(a)
+
+ def computeWithRefinedSoundex(a: Array[Char]) = RefinedSoundex.compute(a)
+
+ 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)
+ }
+ }
+}