1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
/// A more flexible version of `&mut impl Iterator`.
pub struct RcIter<I: ?Sized>(core::cell::RefCell<I>);
impl<T, I: Iterator<Item = T> + ?Sized> Iterator for &RcIter<I> {
type Item = T;
fn next(&mut self) -> Option<T> {
self.0.borrow_mut().next()
}
}
impl<I> RcIter<I> {
/// Construct a new mutable iterator.
pub fn new(iter: I) -> Self {
Self(iter.into())
}
}