#[cfg(feature = "serde")]
extern crate serde;
use Metric;
extern crate triple_accel;
use self::triple_accel::{levenshtein, levenshtein::levenshtein_simd_k};
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Levenshtein;
impl<K: AsRef<str> + ?Sized> Metric<K> for Levenshtein {
fn distance(&self, a: &K, b: &K) -> u32 {
let a_bytes = a.as_ref().as_bytes();
let b_bytes = b.as_ref().as_bytes();
levenshtein(a_bytes, b_bytes)
}
fn threshold_distance(&self, a: &K, b: &K, threshold: u32) -> Option<u32> {
let a_bytes = a.as_ref().as_bytes();
let b_bytes = b.as_ref().as_bytes();
levenshtein_simd_k(a_bytes, b_bytes, threshold)
}
}