Skip to main content

object_rainbow/impls/
vec.rs

1use std::collections::VecDeque;
2
3use crate::{
4    sequence::{PlainCollection, VecLike},
5    *,
6};
7
8impl<T: InlineOutput> ToOutput for Vec<T> {
9    fn to_output(&self, output: &mut impl Output) {
10        T::slice_to_output(self, output);
11    }
12}
13
14impl<T: ListHashes> ListHashes for Vec<T> {
15    fn list_hashes(&self, f: &mut impl FnMut(Hash)) {
16        self.iter_list_hashes(f);
17    }
18}
19
20impl<T: Topological> Topological for Vec<T> {
21    fn traverse(&self, visitor: &mut impl PointVisitor) {
22        self.iter_traverse(visitor);
23    }
24}
25
26impl<T: ParseInline<I>, I: ParseInput> Parse<I> for Vec<T> {
27    fn parse(input: I) -> crate::Result<Self> {
28        input.parse_vec()
29    }
30}
31
32impl<T: Tagged> Tagged for Vec<T> {
33    const TAGS: Tags = T::TAGS;
34}
35
36impl<T: ByteOrd + InlineOutput> ByteOrd for Vec<T> {
37    fn bytes_cmp(&self, other: &Self) -> Ordering {
38        self.iter_bytes_cmp(other)
39    }
40}
41
42impl<T> PlainCollection for Vec<T> {}
43impl<T> VecLike for Vec<T> {}
44
45impl<T: InlineOutput> ToOutput for VecDeque<T> {
46    fn to_output(&self, output: &mut impl Output) {
47        let (l, r) = self.as_slices();
48        T::slice_to_output(l, output);
49        T::slice_to_output(r, output);
50    }
51}
52
53impl<T: ListHashes> ListHashes for VecDeque<T> {
54    fn list_hashes(&self, f: &mut impl FnMut(Hash)) {
55        self.iter_list_hashes(f);
56    }
57}
58
59impl<T: Topological> Topological for VecDeque<T> {
60    fn traverse(&self, visitor: &mut impl PointVisitor) {
61        self.iter_traverse(visitor);
62    }
63}
64
65impl<T: ParseInline<I>, I: ParseInput> Parse<I> for VecDeque<T> {
66    fn parse(input: I) -> crate::Result<Self> {
67        input.parse_vec().map(From::from)
68    }
69}
70
71impl<T: Tagged> Tagged for VecDeque<T> {
72    const TAGS: Tags = T::TAGS;
73}
74
75impl<T: ByteOrd + InlineOutput> ByteOrd for VecDeque<T> {
76    fn bytes_cmp(&self, other: &Self) -> Ordering {
77        self.iter_bytes_cmp(other)
78    }
79}
80
81impl<T> PlainCollection for VecDeque<T> {}
82impl<T> VecLike for VecDeque<T> {}
83
84impl<T> Equivalent<Vec<T>> for VecDeque<T> {
85    fn into_equivalent(self) -> Vec<T> {
86        self.into()
87    }
88
89    fn from_equivalent(vec: Vec<T>) -> Self {
90        vec.into()
91    }
92}