offset_vec/externs/
core_impls.rs1use core::{borrow::{Borrow, BorrowMut}, hash::Hash};
2
3use crate::{create, OffsetVec, VecLike};
4
5impl<V: VecLike> PartialEq for OffsetVec<V> where V::Slice: PartialEq {
6 fn eq(&self, other: &Self) -> bool {
7 **self == **other
8 }
9}
10
11impl<V: VecLike> PartialEq<V> for OffsetVec<V> where V::Slice: PartialEq {
12 fn eq(&self, other: &V) -> bool {
13 **self == *other.as_slice()
14 }
15}
16
17impl<V: VecLike> Eq for OffsetVec<V> where V::Slice: Eq { }
18
19impl<V: VecLike> PartialOrd for OffsetVec<V> where V::Slice: PartialOrd {
20 fn partial_cmp(&self, other: &Self) -> Option<core::cmp::Ordering> {
21 (**self).partial_cmp(&**other)
22 }
23}
24
25impl<V: VecLike> Ord for OffsetVec<V> where V::Slice: Ord {
26 fn cmp(&self, other: &Self) -> core::cmp::Ordering {
27 (**self).cmp(&**other)
28 }
29}
30
31impl<T: PartialEq, V: VecLike<Elem = T, Slice = [T]>> PartialEq<[T]> for OffsetVec<V> {
32 fn eq(&self, other: &[V::Elem]) -> bool {
33 **self == *other
34 }
35}
36impl<T: PartialEq, V: VecLike<Elem = T, Slice = [T]>> PartialEq<&[T]> for OffsetVec<V> {
37 fn eq(&self, other: &&[V::Elem]) -> bool {
38 **self == **other
39 }
40}
41
42impl<T: PartialEq, V: VecLike<Elem = T, Slice = [T]>, const N: usize> PartialEq<[T; N]> for OffsetVec<V> {
43 fn eq(&self, other: &[V::Elem; N]) -> bool {
44 **self == *other
45 }
46}
47impl<T: PartialEq, V: VecLike<Elem = T, Slice = [T]>, const N: usize> PartialEq<&[T; N]> for OffsetVec<V> {
48 fn eq(&self, other: &&[V::Elem; N]) -> bool {
49 **self == **other
50 }
51}
52
53impl<V: VecLike<Slice = str>> PartialEq<str> for OffsetVec<V> {
54 fn eq(&self, other: &str) -> bool {
55 **self == *other
56 }
57}
58impl<V: VecLike<Slice = str>> PartialEq<&str> for OffsetVec<V> {
59 fn eq(&self, other: &&str) -> bool {
60 **self == **other
61 }
62}
63
64impl<V: VecLike + IntoIterator> IntoIterator for OffsetVec<V> {
65 type Item = V::Item;
66 type IntoIter = V::IntoIter;
67
68 fn into_iter(self) -> Self::IntoIter {
69 let mut iter = self.vec.into_iter();
70
71 if self.offset != 0 {
72 iter.nth(self.offset-1);
73 }
74
75 iter
76 }
77}
78
79impl<T, V: VecLike<Slice = [T]>> Borrow<[T]> for OffsetVec<V> {
80 fn borrow(&self) -> &V::Slice {
81 self
82 }
83}
84impl<T, V: VecLike<Slice = [T]>> BorrowMut<[T]> for OffsetVec<V> {
85 fn borrow_mut(&mut self) -> &mut V::Slice {
86 self
87 }
88}
89
90impl<V: VecLike<Slice = str>> Borrow<str> for OffsetVec<V> {
91 fn borrow(&self) -> &V::Slice {
92 self
93 }
94}
95impl<V: VecLike<Slice = str>> BorrowMut<str> for OffsetVec<V> {
96 fn borrow_mut(&mut self) -> &mut V::Slice {
97 self
98 }
99}
100
101impl<V: VecLike> Hash for OffsetVec<V> where V::Slice: Hash {
102 fn hash<H: core::hash::Hasher>(&self, state: &mut H) {
103 self.as_slice().hash(state);
104 }
105}
106
107impl<V: VecLike> AsRef<V::Slice> for OffsetVec<V> {
108 fn as_ref(&self) -> &V::Slice {
109 self
110 }
111}
112
113impl<V: VecLike> AsMut<V::Slice> for OffsetVec<V> {
114 fn as_mut(&mut self) -> &mut V::Slice {
115 self
116 }
117}
118
119impl<V: VecLike> From<V> for OffsetVec<V> {
120 fn from(value: V) -> Self {
121 create(value, 0)
122 }
123}
124
125impl<T, V: VecLike> Extend<T> for OffsetVec<V> where V::Collection: Extend<T> {
126 fn extend<I: IntoIterator<Item = T>>(&mut self, iter: I) {
127 self.vec.as_mut_collection().extend(iter);
128 }
129}