From 9e5cbfb817a6a8c4614259794be48b6f80aae259 Mon Sep 17 00:00:00 2001 From: Chris Mikkelson Date: Fri, 6 Sep 2024 16:23:57 -0500 Subject: [PATCH] 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. --- src/dupsort_func.rs | 4 ++-- src/merge_func.rs | 6 +++--- src/merger.rs | 2 +- src/source.rs | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) 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, -- 2.50.1