1#[derive(Copy, Clone, Debug, Default, PartialEq, Eq, Ord, PartialOrd, Hash)]
10pub enum Status {
11 #[default]
13 New,
14 ResizeLevelRuns,
16 LevelRuns,
18 Wrapped,
20 Ready,
22}
23
24impl Status {
25 #[inline]
27 pub fn is_ready(&self) -> bool {
28 *self == Status::Ready
29 }
30}
31
32pub struct OwningVecIter<T: Clone> {
34 v: Vec<T>,
35 i: usize,
36}
37
38impl<T: Clone> OwningVecIter<T> {
39 pub fn new(v: Vec<T>) -> Self {
41 let i = 0;
42 OwningVecIter { v, i }
43 }
44}
45
46impl<T: Clone> Iterator for OwningVecIter<T> {
47 type Item = T;
48 fn next(&mut self) -> Option<Self::Item> {
49 if self.i < self.v.len() {
50 let item = self.v[self.i].clone();
51 self.i += 1;
52 Some(item)
53 } else {
54 None
55 }
56 }
57
58 fn size_hint(&self) -> (usize, Option<usize>) {
59 let len = self.v.len() - self.i;
60 (len, Some(len))
61 }
62}
63
64impl<T: Clone> ExactSizeIterator for OwningVecIter<T> {}
65impl<T: Clone> std::iter::FusedIterator for OwningVecIter<T> {}