#[inline(always)]
pub(crate) fn end<T>(slice: &[T]) -> &[T] {
unsafe { slice.get_unchecked(slice.len()..) }
}
#[inline(always)]
pub(crate) fn split_at_opt<T>(slice: &[T], mid: usize) -> Option<(&[T], &[T])> {
if mid > slice.len() {
None
} else {
unsafe { Some(split_at_unchecked(slice, mid)) }
}
}
#[inline(always)]
pub(crate) unsafe fn first_unchecked<T: Copy>(slice: &[T]) -> T {
debug_assert!(!slice.is_empty());
*slice.get_unchecked(0)
}
#[inline(always)]
pub(crate) unsafe fn split_at_unchecked<T>(slice: &[T], mid: usize) -> (&[T], &[T]) {
debug_assert!(mid <= slice.len());
(slice.get_unchecked(..mid), slice.get_unchecked(mid..))
}
#[inline(always)]
pub(crate) unsafe fn split_str_at_unchecked(slice: &str, mid: usize) -> (&str, &str) {
debug_assert!(mid <= slice.len());
debug_assert!(slice.is_char_boundary(mid));
(slice.get_unchecked(..mid), slice.get_unchecked(mid..))
}