1use crate::*;
2use std::cmp::*;
3
4impl<T> PartialOrd for PinnedDeque<T>
5where
6 T: Sized + PartialOrd,
7{
8 fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
9 let mut it_a = self.iter();
10 let mut it_b = other.iter();
11 loop {
12 let Some(a) = it_a.next() else {
13 break;
14 };
15 let Some(b) = it_b.next() else {
16 break;
17 };
18 let cmp = a.partial_cmp(b);
19 if !matches!(cmp, Some(Ordering::Equal)) {
20 return cmp;
21 }
22 }
23 match (it_a.next(), it_b.next()) {
24 (Some(_), None) => Some(Ordering::Greater),
25 (None, Some(_)) => Some(Ordering::Less),
26 (None, None) => Some(Ordering::Equal),
27 _ => unreachable!(),
28 }
29 }
30}
31
32impl<T> PartialEq for PinnedDeque<T>
33where
34 T: Sized + PartialEq,
35{
36 fn eq(&self, other: &Self) -> bool {
37 if self.len() != other.len() {
38 return false;
39 }
40 let mut it_a = self.iter();
41 let mut it_b = other.iter();
42 loop {
43 let Some(a) = it_a.next() else {
44 break;
45 };
46 let Some(b) = it_b.next() else {
47 break;
48 };
49 let eq = a.eq(b);
50 if !eq {
51 return false;
52 }
53 }
54 true
55 }
56}
57
58impl<T> Ord for PinnedDeque<T>
59where
60 T: Sized + Ord,
61{
62 fn cmp(&self, other: &Self) -> Ordering {
63 self.partial_cmp(other).unwrap()
64 }
65}
66
67impl<T> Eq for PinnedDeque<T> where T: Sized + Eq {}