tagged_vec/
trait_impls.rs1use std::{fmt::Debug, marker::PhantomData};
2
3use crate::TaggedVec;
4
5impl<Index, Value> FromIterator<Value> for TaggedVec<Index, Value> {
6 fn from_iter<T: IntoIterator<Item = Value>>(iter: T) -> Self {
7 Self {
8 index_type: PhantomData,
9 vec: FromIterator::from_iter(iter),
10 }
11 }
12}
13
14impl<Index, Value> IntoIterator for TaggedVec<Index, Value> {
15 type Item = Value;
16
17 type IntoIter = <Vec<Value> as IntoIterator>::IntoIter;
18
19 fn into_iter(self) -> Self::IntoIter {
20 self.vec.into_iter()
21 }
22}
23
24impl<'a, Index, Value> IntoIterator for &'a TaggedVec<Index, Value> {
25 type Item = &'a Value;
26
27 type IntoIter = <&'a Vec<Value> as IntoIterator>::IntoIter;
28
29 fn into_iter(self) -> Self::IntoIter {
30 self.vec.iter()
31 }
32}
33
34impl<'a, Index, Value> IntoIterator for &'a mut TaggedVec<Index, Value> {
35 type Item = &'a mut Value;
36
37 type IntoIter = <&'a mut Vec<Value> as IntoIterator>::IntoIter;
38
39 fn into_iter(self) -> Self::IntoIter {
40 self.vec.iter_mut()
41 }
42}
43
44impl<Index, Value> From<Vec<Value>> for TaggedVec<Index, Value> {
45 fn from(value: Vec<Value>) -> Self {
46 Self {
47 index_type: PhantomData,
48 vec: value,
49 }
50 }
51}
52
53impl<Index, Value> From<TaggedVec<Index, Value>> for Vec<Value> {
54 fn from(value: TaggedVec<Index, Value>) -> Self {
55 value.vec
56 }
57}
58
59impl<Index, Value: Debug> Debug for TaggedVec<Index, Value> {
60 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
61 write!(f, "TaggedVec{:?}", self.vec)
62 }
63}
64
65impl<Index, Value: Clone> Clone for TaggedVec<Index, Value> {
66 fn clone(&self) -> Self {
67 Self {
68 index_type: PhantomData,
69 vec: self.vec.clone(),
70 }
71 }
72}
73
74impl<Index, Value> Default for TaggedVec<Index, Value> {
75 fn default() -> Self {
76 Self {
77 index_type: PhantomData,
78 vec: Default::default(),
79 }
80 }
81}
82
83impl<Index, Value: PartialEq> PartialEq for TaggedVec<Index, Value> {
84 fn eq(&self, other: &Self) -> bool {
85 self.vec == other.vec
86 }
87}
88
89impl<Index, Value: Eq> Eq for TaggedVec<Index, Value> {}
90
91impl<Index, Value: PartialOrd> PartialOrd for TaggedVec<Index, Value> {
92 fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
93 self.vec.partial_cmp(&other.vec)
94 }
95}
96
97impl<Index, Value: Ord> Ord for TaggedVec<Index, Value> {
98 fn cmp(&self, other: &Self) -> std::cmp::Ordering {
99 self.vec.cmp(&other.vec)
100 }
101}
102
103impl<Index: Into<usize>, Value> std::ops::Index<Index> for TaggedVec<Index, Value> {
108 type Output = Value;
109
110 fn index(&self, index: Index) -> &Self::Output {
111 &self.vec[index.into()]
112 }
113}
114
115impl<Index: Into<usize>, Value> std::ops::IndexMut<Index> for TaggedVec<Index, Value> {
116 fn index_mut(&mut self, index: Index) -> &mut Self::Output {
117 &mut self.vec[index.into()]
118 }
119}