tan/util/
put_back_iterator.rs1pub struct PutBackIterator<'a, T> {
4 items: std::slice::Iter<'a, T>,
5 buffer: Vec<&'a T>,
6}
7
8impl<'a, T> Iterator for PutBackIterator<'a, T> {
9 type Item = &'a T;
10
11 fn next(&mut self) -> Option<Self::Item> {
12 if let Some(item) = self.buffer.pop() {
15 return Some(item);
16 }
17
18 if let Some(item) = self.items.next() {
19 Some(item)
20 } else {
21 None
22 }
23 }
24
25 }
27
28impl<'a, T> PutBackIterator<'a, T> {
30 pub fn new(items: &'a [T]) -> Self {
31 Self {
32 items: items.iter(),
33 buffer: Vec::new(),
34 }
35 }
36
37 pub fn put_back(&mut self, item: &'a T) {
39 self.buffer.push(item);
40 }
41}
42
43