pub trait Iter: Iterator<Item = Entry> + Sized {
fn seek<T: AsRef<[u8]>>(&mut self, key: T);
- fn wrap_iter<F: FnOnce(IterBox<Self>) -> O, O: Iterator<Item = Entry>>(
+ fn wrap_iter<F: FnOnce(IterCell<Self>) -> O, O: Iterator<Item = Entry>>(
self,
f: F,
) -> impl Iter {
- let it = IterBox::new(self);
+ let it = IterCell::new(self);
WrapIter {
inner: it.clone(),
outer: f(it),
// WrapIter
-pub struct IterBox<I: Iter>(Rc<RefCell<I>>);
+pub struct IterCell<I: Iter> {
+ ic: Rc<RefCell<I>>
+}
-impl<I: Iter> Clone for IterBox<I> {
+impl<I: Iter> Clone for IterCell<I> {
fn clone(&self) -> Self {
- IterBox(self.0.clone())
+ IterCell{ic: self.ic.clone()}
}
}
-impl<I: Iter> IterBox<I> {
- fn new(i: I) -> IterBox<I> {
- IterBox(Rc::new(RefCell::new(i)))
+impl<I: Iter> IterCell<I> {
+ fn new(i: I) -> IterCell<I> {
+ IterCell{ic: Rc::new(RefCell::new(i))}
}
}
-impl<I: Iter> Iterator for IterBox<I> {
+impl<I: Iter> Iterator for IterCell<I> {
type Item = Entry;
fn next(&mut self) -> Option<Entry> {
- self.0.borrow_mut().next()
+ self.ic.borrow_mut().next()
}
}
-impl<I: Iter> Iter for IterBox<I> {
+impl<I: Iter> Iter for IterCell<I> {
fn seek<T: AsRef<[u8]>>(&mut self, key: T) {
- self.0.borrow_mut().seek(key);
+ self.ic.borrow_mut().seek(key);
}
}
+
struct WrapIter<I: Iter, O: Iterator<Item = Entry>> {
- inner: IterBox<I>,
+ inner: IterCell<I>,
outer: O,
}