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 | 46 |
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) + } + } +} |