simdphrase 0.1.1

Extremely fast phrase search implementation.
Documentation
use std::{iter::FusedIterator, num::NonZero};

pub struct DecreasingWindows<'a, T: 'a> {
    v: &'a [T],
    size: NonZero<usize>,
}
impl<'a, T: 'a> DecreasingWindows<'a, T> {
    #[inline]
    pub fn new(slice: &'a [T], size: NonZero<usize>) -> Self {
        Self { v: slice, size }
    }
}
impl<'a, T> Iterator for DecreasingWindows<'a, T> {
    type Item = &'a [T];

    #[inline]
    fn next(&mut self) -> Option<&'a [T]> {
        if self.size.get() > self.v.len() {
            self.size = NonZero::new(self.v.len())?;
        }

        let ret = Some(&self.v[..self.size.get()]);
        self.v = &self.v[1..];
        ret
    }

    #[inline]
    fn size_hint(&self) -> (usize, Option<usize>) {
        let size = self.v.len();
        (size, Some(size))
    }

    #[inline]
    fn count(self) -> usize {
        self.len()
    }
}
impl<T> ExactSizeIterator for DecreasingWindows<'_, T> {}
impl<T> FusedIterator for DecreasingWindows<'_, T> {}