From: Chris Mikkelson Date: Sun, 7 Apr 2024 18:08:03 +0000 (-0500) Subject: Iter::filter_seek: consume source iterator X-Git-Url: https://git.mikk.net/?a=commitdiff_plain;h=b477b641cea83010337735b0fb436b1cd54c3f3e;p=mtbl-rs Iter::filter_seek: consume source iterator --- diff --git a/src/iter.rs b/src/iter.rs index 47b4b85..034344e 100644 --- a/src/iter.rs +++ b/src/iter.rs @@ -18,7 +18,7 @@ pub trait Iter: Iterator + Sized { } // provided methods - fn filter_seek(&mut self, filter: F) -> impl Iter + fn filter_seek(self, filter: F) -> impl Iter where F: FnMut(&Entry, &mut Vec) -> FilterSeekResult, { @@ -88,14 +88,13 @@ pub enum FilterSeekResult { } pub use FilterSeekResult::*; -struct FilterSeek<'i, I: Iterator, F: FnMut(&Entry, &mut Vec) -> FilterSeekResult> -{ - inner: &'i mut I, +struct FilterSeek, F: FnMut(&Entry, &mut Vec) -> FilterSeekResult> { + inner: I, filter_func: F, seek_key: Vec, } -impl<'i, I, F> Iterator for FilterSeek<'i, I, F> +impl Iterator for FilterSeek where F: FnMut(&Entry, &mut Vec) -> FilterSeekResult, I: Iter, @@ -115,7 +114,7 @@ where } } -impl<'i, I, F> Iter for FilterSeek<'i, I, F> +impl Iter for FilterSeek where F: FnMut(&Entry, &mut Vec) -> FilterSeekResult, I: Iter, @@ -154,7 +153,7 @@ mod test { #[test] fn test_iter_filter() { - let mut ti = TestIter(0); + let ti = TestIter(0); let v: Vec = ti .filter_seek(|e, k| { let b = e.key[0];