use core::mem;
#[derive(Debug)]
#[repr(transparent)]
pub struct PopulatedSlice<T>([T]);
impl<T> PopulatedSlice<T> {
#[inline(always)]
pub unsafe fn new_unchecked(slice: &[T]) -> &Self {
debug_assert!(!slice.is_empty());
unsafe { mem::transmute(slice) }
}
#[inline]
pub fn new(slice: &[T]) -> Option<&Self> {
match slice.is_empty() {
true => None,
false => Some(unsafe { Self::new_unchecked(slice) }),
}
}
#[inline]
pub fn split_first(&self) -> (&T, &[T]) {
debug_assert!(!self.0.is_empty());
unsafe { self.0.split_first().unwrap_unchecked() }
}
#[inline(always)]
pub fn get(&self) -> &[T] {
&self.0
}
}