use crate::api::*;
pub struct ComparableArray<'a, T, const N: usize>
where
T: PartialEq,
{
data: &'a [T; N],
}
#[inline(always)]
pub fn is_buffer_equal<T: PartialEq>(buf_1: &[T], buf_2: &[T]) -> bool {
let buf1_len = buf_1.len();
if buf1_len != buf_2.len() {
return false;
};
let mut i = 0;
while {
max_iter(buf1_len as u32 + 1);
i < buf1_len
} {
if buf_1[i] != buf_2[i] {
return false;
}
i += 1;
}
true
}
impl<'a, T: PartialEq, const N: usize> ComparableArray<'a, T, N> {
#[inline(always)]
pub const fn new(data: &'a [T; N]) -> Self {
Self { data }
}
}
impl<T: PartialEq, const N: usize> AsRef<[T]> for ComparableArray<'_, T, N> {
fn as_ref(&self) -> &[T] {
self.data.as_ref()
}
}
impl<T, const N: usize> PartialEq for ComparableArray<'_, T, N>
where
T: PartialEq,
{
fn eq(&self, other: &Self) -> bool {
is_buffer_equal::<T>(self.as_ref(), other.as_ref())
}
}
impl<'a, T, const N: usize> From<&'a [T; N]> for ComparableArray<'a, T, N>
where
T: PartialEq,
{
fn from(data: &'a [T; N]) -> Self {
Self::new(data)
}
}
#[cfg(test)]
mod tests {
}