orx-fixed-vec 3.23.0

An efficient fixed capacity vector with pinned element guarantees.
Documentation
pub struct FixedVecPtrIter<T> {
    ptr: *mut T,
    len: usize,
    current: usize,
}

impl<T> FixedVecPtrIter<T> {
    pub(crate) fn new(ptr: *mut T, len: usize) -> Self {
        Self {
            ptr,
            len,
            current: 0,
        }
    }
}

impl<T> Default for FixedVecPtrIter<T> {
    fn default() -> Self {
        Self {
            ptr: core::ptr::null_mut(),
            len: 0,
            current: 0,
        }
    }
}

impl<T> Iterator for FixedVecPtrIter<T> {
    type Item = *mut T;

    fn next(&mut self) -> Option<Self::Item> {
        match self.current < self.len {
            true => {
                // SAFETY: current is within bounds of the vector
                let ptr = unsafe { self.ptr.add(self.current) };
                self.current += 1;
                Some(ptr)
            }
            false => None,
        }
    }

    fn size_hint(&self) -> (usize, Option<usize>) {
        let len = self.len - self.current;
        (len, Some(len))
    }
}

impl<T> ExactSizeIterator for FixedVecPtrIter<T> {
    fn len(&self) -> usize {
        self.len - self.current
    }
}