shared_vec/impls/
cmp.rs

1use crate::{Counter, String, Vec};
2use alloc::borrow::Cow;
3use core::cmp::Ordering;
4
5macro_rules! impl_eq_as_str {
6    ($lhs:ty, $rhs:ty) => {
7        impl<C: Counter<usize>> PartialEq<$rhs> for $lhs {
8            fn eq(&self, other: &$rhs) -> bool {
9                let lhs: &str = self;
10                let rhs: &str = other;
11                lhs == rhs
12            }
13        }
14    };
15}
16
17impl_eq_as_str!(String<C>, Cow<'_, str>);
18impl_eq_as_str!(Cow<'_, str>, String<C>);
19
20impl_eq_as_str!(String<C>, str);
21impl_eq_as_str!(str, String<C>);
22
23impl_eq_as_str!(String<C>, alloc::string::String);
24impl_eq_as_str!(alloc::string::String, String<C>);
25
26impl<C1: Counter<usize>, C2: Counter<usize>> PartialEq<String<C2>> for String<C1> {
27    fn eq(&self, other: &String<C2>) -> bool {
28        let lhs: &str = self;
29        let rhs: &str = other;
30        lhs == rhs
31    }
32}
33impl<C: Counter<usize>> Eq for String<C> {}
34impl<C1: Counter<usize>, C2: Counter<usize>> PartialOrd<String<C2>> for String<C1> {
35    fn partial_cmp(&self, other: &String<C2>) -> Option<Ordering> {
36        Some(self.as_str().cmp(other.as_str()))
37    }
38}
39impl<C: Counter<usize>> Ord for String<C> {
40    fn cmp(&self, other: &Self) -> Ordering {
41        self.as_str().cmp(other.as_str())
42    }
43}
44
45macro_rules! impl_eq_as_slice {
46    ($lhs:ty, $rhs:ty $(; $($tt:tt)+ )? ) => {
47        impl<C: Counter<usize>, T: PartialEq $(, $($tt)+)? > PartialEq<$rhs> for $lhs {
48            fn eq(&self, other: &$rhs) -> bool {
49                let lhs: &[T] = self;
50                let rhs: &[T] = other;
51                lhs == rhs
52            }
53        }
54    };
55}
56
57impl_eq_as_slice!(Vec<C, T>, [T; N]; const N: usize);
58impl_eq_as_slice!([T; N], Vec<C, T>; const N: usize);
59
60impl_eq_as_slice!(Vec<C, T>, [T]);
61impl_eq_as_slice!([T], Vec<C, T>);
62
63impl_eq_as_slice!(Vec<C, T>, Vec<C, T>);
64
65impl<C: Counter<usize>, T> Eq for Vec<C, T> where T: Eq {}
66impl<C: Counter<usize>, T> PartialOrd for Vec<C, T>
67where
68    T: PartialOrd,
69{
70    #[inline]
71    fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
72        self.as_slice().partial_cmp(other.as_slice())
73    }
74}
75impl<C: Counter<usize>, T> Ord for Vec<C, T>
76where
77    T: Ord,
78{
79    #[inline]
80    fn cmp(&self, other: &Self) -> Ordering {
81        self.as_slice().cmp(other.as_slice())
82    }
83}