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