]> git.mikk.net Git - mtbl-rs/commitdiff
More cleanup from "impl Iter" based sources
authorChris Mikkelson <cmikk@fsi.io>
Fri, 6 Sep 2024 21:23:57 +0000 (16:23 -0500)
committerChris Mikkelson <cmikk@fsi.io>
Fri, 6 Sep 2024 21:29:39 +0000 (16:29 -0500)
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
src/merge_func.rs
src/merger.rs
src/source.rs

index 9d155510f6719920dc39e3c8e96a1dc7ba0b7dc3..956233c10bdaa8b444fed22c2d7c490c217a84ec 100644 (file)
@@ -23,7 +23,7 @@ where
     }
 }
 
-impl<'a, S, F> Source for &'a DupsortFunc<S, F>
+impl<S, F> Source for DupsortFunc<S, F>
 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,
index 9aff2b6e0ad423c4665c22f9b9754672889991fa..dd253784b2450f4f3ccce461667179537a93ca7b 100644 (file)
@@ -15,7 +15,7 @@ where
     }
 }
 
-impl<'a, S, F> Source for &'a MergeFunc<S, F>
+impl<S, F> Source for MergeFunc<S, F>
 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<u8>, &Entry)> {
     prev: Option<Entry>,
     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::<Vec<_>>()
index a4f31a0249a21ab8955fe9ac5324ae6374bd1830..a0bdca8f65dc181883e127cdc6729a18b6f31ed6 100644 (file)
@@ -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::<u8>::new();
         for i in range {
             v.extend(tnum(i))
index 3b464ac75913a20709206b983003a9e36de97212..9403378cd7e070b8204fb4cff69c25c236c297bb 100644 (file)
@@ -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,