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}