1*753dece8SMiguel Ojeda use crate::alloc::Allocator; 2*753dece8SMiguel Ojeda #[cfg(not(no_global_oom_handling))] 3*753dece8SMiguel Ojeda use crate::borrow::Cow; 4*753dece8SMiguel Ojeda 5*753dece8SMiguel Ojeda use super::Vec; 6*753dece8SMiguel Ojeda 7*753dece8SMiguel Ojeda macro_rules! __impl_slice_eq1 { 8*753dece8SMiguel Ojeda ([$($vars:tt)*] $lhs:ty, $rhs:ty $(where $ty:ty: $bound:ident)?, #[$stability:meta]) => { 9*753dece8SMiguel Ojeda #[$stability] 10*753dece8SMiguel Ojeda impl<T, U, $($vars)*> PartialEq<$rhs> for $lhs 11*753dece8SMiguel Ojeda where 12*753dece8SMiguel Ojeda T: PartialEq<U>, 13*753dece8SMiguel Ojeda $($ty: $bound)? 14*753dece8SMiguel Ojeda { 15*753dece8SMiguel Ojeda #[inline] 16*753dece8SMiguel Ojeda fn eq(&self, other: &$rhs) -> bool { self[..] == other[..] } 17*753dece8SMiguel Ojeda #[inline] 18*753dece8SMiguel Ojeda fn ne(&self, other: &$rhs) -> bool { self[..] != other[..] } 19*753dece8SMiguel Ojeda } 20*753dece8SMiguel Ojeda } 21*753dece8SMiguel Ojeda } 22*753dece8SMiguel Ojeda 23*753dece8SMiguel Ojeda __impl_slice_eq1! { [A1: Allocator, A2: Allocator] Vec<T, A1>, Vec<U, A2>, #[stable(feature = "rust1", since = "1.0.0")] } 24*753dece8SMiguel Ojeda __impl_slice_eq1! { [A: Allocator] Vec<T, A>, &[U], #[stable(feature = "rust1", since = "1.0.0")] } 25*753dece8SMiguel Ojeda __impl_slice_eq1! { [A: Allocator] Vec<T, A>, &mut [U], #[stable(feature = "rust1", since = "1.0.0")] } 26*753dece8SMiguel Ojeda __impl_slice_eq1! { [A: Allocator] &[T], Vec<U, A>, #[stable(feature = "partialeq_vec_for_ref_slice", since = "1.46.0")] } 27*753dece8SMiguel Ojeda __impl_slice_eq1! { [A: Allocator] &mut [T], Vec<U, A>, #[stable(feature = "partialeq_vec_for_ref_slice", since = "1.46.0")] } 28*753dece8SMiguel Ojeda __impl_slice_eq1! { [A: Allocator] Vec<T, A>, [U], #[stable(feature = "partialeq_vec_for_slice", since = "1.48.0")] } 29*753dece8SMiguel Ojeda __impl_slice_eq1! { [A: Allocator] [T], Vec<U, A>, #[stable(feature = "partialeq_vec_for_slice", since = "1.48.0")] } 30*753dece8SMiguel Ojeda #[cfg(not(no_global_oom_handling))] 31*753dece8SMiguel Ojeda __impl_slice_eq1! { [A: Allocator] Cow<'_, [T]>, Vec<U, A> where T: Clone, #[stable(feature = "rust1", since = "1.0.0")] } 32*753dece8SMiguel Ojeda #[cfg(not(no_global_oom_handling))] 33*753dece8SMiguel Ojeda __impl_slice_eq1! { [] Cow<'_, [T]>, &[U] where T: Clone, #[stable(feature = "rust1", since = "1.0.0")] } 34*753dece8SMiguel Ojeda #[cfg(not(no_global_oom_handling))] 35*753dece8SMiguel Ojeda __impl_slice_eq1! { [] Cow<'_, [T]>, &mut [U] where T: Clone, #[stable(feature = "rust1", since = "1.0.0")] } 36*753dece8SMiguel Ojeda __impl_slice_eq1! { [A: Allocator, const N: usize] Vec<T, A>, [U; N], #[stable(feature = "rust1", since = "1.0.0")] } 37*753dece8SMiguel Ojeda __impl_slice_eq1! { [A: Allocator, const N: usize] Vec<T, A>, &[U; N], #[stable(feature = "rust1", since = "1.0.0")] } 38*753dece8SMiguel Ojeda 39*753dece8SMiguel Ojeda // NOTE: some less important impls are omitted to reduce code bloat 40*753dece8SMiguel Ojeda // FIXME(Centril): Reconsider this? 41*753dece8SMiguel Ojeda //__impl_slice_eq1! { [const N: usize] Vec<A>, &mut [B; N], } 42*753dece8SMiguel Ojeda //__impl_slice_eq1! { [const N: usize] [A; N], Vec<B>, } 43*753dece8SMiguel Ojeda //__impl_slice_eq1! { [const N: usize] &[A; N], Vec<B>, } 44*753dece8SMiguel Ojeda //__impl_slice_eq1! { [const N: usize] &mut [A; N], Vec<B>, } 45*753dece8SMiguel Ojeda //__impl_slice_eq1! { [const N: usize] Cow<'a, [A]>, [B; N], } 46*753dece8SMiguel Ojeda //__impl_slice_eq1! { [const N: usize] Cow<'a, [A]>, &[B; N], } 47*753dece8SMiguel Ojeda //__impl_slice_eq1! { [const N: usize] Cow<'a, [A]>, &mut [B; N], } 48