async_ecs/misc/bit/
producer.rs

1use asparit::{Producer, WithSetup};
2use hibitset::BitSetLike;
3
4use super::BitIter;
5
6pub struct BitProducer<T> {
7    pub iter: BitIter<T>,
8}
9
10impl<T> BitProducer<T> {
11    pub fn new(iter: BitIter<T>) -> Self {
12        Self { iter }
13    }
14}
15
16impl<T> WithSetup for BitProducer<T> {}
17
18impl<T> Producer for BitProducer<T>
19where
20    T: BitSetLike + Copy + Send + Sync,
21{
22    type Item = u32;
23    type IntoIter = BitIter<T>;
24
25    fn into_iter(self) -> Self::IntoIter {
26        self.iter
27    }
28
29    fn split(self) -> (Self, Option<Self>) {
30        let (left, right) = self.iter.split();
31
32        (Self::new(left), right.map(Self::new))
33    }
34}