cobs-simd 0.2.1

COBS encoding library using SIMD instructions
Documentation
use std::cmp::min;

pub struct AlignedIter<'a> {
    data: &'a [u8],
    align_bytes: usize,
    offset: usize,
    processed: usize,
}

impl<'a> AlignedIter<'a> {
    #[allow(unused)]
    pub fn new(data: &'a [u8], align_bytes: usize) -> AlignedIter<'a> {
        AlignedIter {
            data,
            align_bytes,
            offset: data.as_ptr().align_offset(16),
            processed: 0,
        }
    }
}

impl<'a> Iterator for AlignedIter<'a> {
    type Item = &'a [u8];

    fn next(&mut self) -> Option<Self::Item> {
        if self.processed == self.data.len() {
            None
        } else {
            let len = min(
                self.data.len() - self.processed,
                if self.processed < self.offset {
                    self.offset
                } else {
                    self.align_bytes
                },
            );
            let start = self.processed;
            self.processed += len;
            Some(&self.data[start..start + len])
        }
    }
}