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