From: Chris Mikkelson Date: Fri, 6 Sep 2024 21:23:57 +0000 (-0500) Subject: More cleanup from "impl Iter" based sources X-Git-Url: https://git.mikk.net/?a=commitdiff_plain;h=9e5cbfb817a6a8c4614259794be48b6f80aae259;p=mtbl-rs More cleanup from "impl Iter" based sources Not having to explicitly name the iterator return types saves the need to name the returned iterator's reference lifetimes, if any. This removes the need to implement Source on a reference to a type in order to assign `&self` a lifetime. Once again, we can implment Source on an owned type reliably, saving the need for pointer indirections. --- diff --git a/src/dupsort_func.rs b/src/dupsort_func.rs index 9d15551..956233c 100644 --- a/src/dupsort_func.rs +++ b/src/dupsort_func.rs @@ -23,7 +23,7 @@ where } } -impl<'a, S, F> Source for &'a DupsortFunc +impl Source for DupsortFunc where S: Source, F: Fn(&Entry, &Entry) -> Ordering, @@ -63,7 +63,7 @@ where } #[derive(Debug)] -pub struct DupsortFuncIter<'a, I, F> +struct DupsortFuncIter<'a, I, F> where I: Iter, F: Fn(&Entry, &Entry) -> Ordering, diff --git a/src/merge_func.rs b/src/merge_func.rs index 9aff2b6..dd25378 100644 --- a/src/merge_func.rs +++ b/src/merge_func.rs @@ -15,7 +15,7 @@ where } } -impl<'a, S, F> Source for &'a MergeFunc +impl Source for MergeFunc where S: Source, F: Fn(&mut Entry, &Entry) + Clone, @@ -50,7 +50,7 @@ where } } -pub struct MergeFuncIter<'a, I: Iter, F: Fn(&mut Entry, &Entry)> { +struct MergeFuncIter<'a, I: Iter, F: Fn(&mut Vec, &Entry)> { prev: Option, iter: I, merge_func: &'a F, @@ -106,7 +106,7 @@ fn test_merge_func() { }); assert_eq!( - Vec::from_iter((&s).iter()), + Vec::from_iter(s.iter()), (1u8..8) .map(|n| Entry::new(vec![n], vec![n])) .collect::>() diff --git a/src/merger.rs b/src/merger.rs index a4f31a0..a0bdca8 100644 --- a/src/merger.rs +++ b/src/merger.rs @@ -174,7 +174,7 @@ mod test { fn test_merge() { let range = 1..8; let iters: Vec<_> = range.clone().into_iter().map(test_source).collect(); - let s = Merger::from(iters.iter()); + let s = Merger::from(iters); let mut v = Vec::::new(); for i in range { v.extend(tnum(i)) diff --git a/src/source.rs b/src/source.rs index 3b464ac..9403378 100644 --- a/src/source.rs +++ b/src/source.rs @@ -68,7 +68,7 @@ pub mod test_source { } } - impl<'a> Source for &'a TestSource { + impl Source for TestSource { fn iter(&self) -> impl Iter { TestIter { source: self,