unchecked-std 1.1.1

Fast, unchecked variants of common std methods
Documentation
use alloc::vec::Vec;

pub trait GenericVec {
    type Item;

    fn len(&self) -> usize;
    fn capacity(&self) -> usize;
    fn as_ptr(&self) -> *const Self::Item;
    fn as_mut_ptr(&mut self) -> *mut Self::Item;
    unsafe fn set_len(&mut self, new_len: usize);
}

impl<T> GenericVec for Vec<T> {
    type Item = T;

    #[inline]
    fn len(&self) -> usize {
        self.len()
    }

    #[inline]
    fn capacity(&self) -> usize {
        self.capacity()
    }

    #[inline]
    fn as_ptr(&self) -> *const T {
        self.as_ptr()
    }

    #[inline]
    fn as_mut_ptr(&mut self) -> *mut T {
        self.as_mut_ptr()
    }

    #[inline]
    unsafe fn set_len(&mut self, new_len: usize) {
        self.set_len(new_len);
    }
}

#[cfg(feature = "heapless")]
impl<T, const N: usize> GenericVec for heapless::Vec<T, N> {
    type Item = T;

    #[inline]
    fn len(&self) -> usize {
        self.as_slice().len()
    }

    #[inline]
    fn capacity(&self) -> usize {
        self.capacity()
    }

    #[inline]
    fn as_ptr(&self) -> *const T {
        self.as_ptr()
    }

    #[inline]
    fn as_mut_ptr(&mut self) -> *mut T {
        self.as_mut_ptr()
    }

    #[inline]
    unsafe fn set_len(&mut self, new_len: usize) {
        self.set_len(new_len);
    }
}