use crate::slice;
#[track_caller]
pub const fn as_chunks<'a, T, const N: usize>(this: &[T]) -> (&[[T; N]], &[T]) {
assert!(N != 0, "chunk size must be non-zero");
let arrs_len = this.len() / N;
let (arrs_in, rem) = slice::split_at(this, arrs_len * N);
let arrs: &[[T; N]] =
unsafe { core::slice::from_raw_parts(arrs_in.as_ptr() as *const [T; N], arrs_len) };
(arrs, rem)
}
#[track_caller]
pub const fn as_rchunks<'a, T, const N: usize>(this: &[T]) -> (&[T], &[[T; N]]) {
assert!(N != 0, "chunk size must be non-zero");
let arrs_len = this.len() / N;
let rem_len = this.len() % N;
let (rem, arrs_in) = slice::split_at(this, rem_len);
let arrs: &[[T; N]] =
unsafe { core::slice::from_raw_parts(arrs_in.as_ptr() as *const [T; N], arrs_len) };
(rem, arrs)
}