]> git.mikk.net Git - mtbl-rs/commitdiff
Streamline sorter 'write' method again.
authorChris Mikkelson <chris@mikk.net>
Mon, 7 Apr 2025 01:26:29 +0000 (20:26 -0500)
committerChris Mikkelson <chris@mikk.net>
Mon, 7 Apr 2025 01:26:29 +0000 (20:26 -0500)
src/sorter.rs

index 367c26ee35c5186f9d4c3f90ded3c6252881186d..fe4073f563623e6cb2db4cf7298843d06e82b948 100644 (file)
@@ -1,4 +1,4 @@
-use crate::{Entry, Merger, Reader, Source, Writer};
+use crate::{merge::MergeSource, Entry, Merger, Reader, Source, Writer};
 use memmap::Mmap;
 use std::cell::Cell;
 
@@ -35,21 +35,15 @@ where
         self.batch_size += esize;
     }
 
-    pub fn source(&mut self) -> impl Source<'_, Item = Entry> {
+    pub fn source<'a>(mut self) -> MergeSource<'a, Merger<Reader<Mmap>>, F> {
         if !self.batch.get_mut().is_empty() {
             self.write_chunk();
         }
-        Merger::from(self.readers.clone()).merge_func(&self.merge_func)
+        Merger::from(self.readers).merge_func(self.merge_func)
     }
 
-    pub fn write<W: std::io::Write>(mut self, mut w: Writer<W>) {
-        if !self.batch.get_mut().is_empty() {
-            self.write_chunk();
-        }
-        let m = Merger::from(self.readers).merge_func(self.merge_func);
-        m.iter().for_each(|e| {
-            w.add(e).unwrap();
-        });
+    pub fn write<W: std::io::Write>(self, mut w: Writer<W>) {
+        self.source().iter().for_each(|e| w.add(e).unwrap());
     }
 
     fn write_chunk(&mut self) {