use std::mem::size_of;
use pi_null::Null;
pub trait VecExt<T> {
fn insert_value(&mut self, index: usize, value: T);
}
impl<T: Null> VecExt<T> for Vec<T> {
default fn insert_value(&mut self, index: usize, value: T) {
if size_of::<T>() == 0 {
return;
}
if index >= self.len() {
self.resize_with(index + 1, || T::null());
}
unsafe { *self.get_unchecked_mut(index) = value; };
}
}
impl<T: Null + Clone> VecExt<T> for Vec<T> {
fn insert_value(&mut self, index: usize, value: T) {
if size_of::<T>() == 0 {
return;
}
let t = T::null();
if index >= self.len() {
self.resize(index + 1, t);
}
unsafe { *self.get_unchecked_mut(index) = value; };
}
}