]> git.mikk.net Git - mtbl-rs/commitdiff
Move SeekableVec to module for test support
authorChris Mikkelson <cmikk@fsi.io>
Sun, 28 Apr 2024 18:52:14 +0000 (13:52 -0500)
committerChris Mikkelson <cmikk@fsi.io>
Sun, 28 Apr 2024 18:53:50 +0000 (13:53 -0500)
src/seekable.rs
src/seekable/merge.rs
src/seekable/vec.rs [new file with mode: 0644]

index 6d422f410f59d820cfa4d55a5fd076c90445eba0..7b23ec52ca397536ed1de21565752b2c62b95703 100644 (file)
@@ -1,5 +1,6 @@
 mod filter_map;
 mod merge;
+mod vec;
 pub use filter_map::FilterMap;
 pub use merge::Merger;
 
index c099b3408502f3939f110e35c6d021c0933e980f..1f2bb782662e44d9249677b6638ff6c83ee9339f 100644 (file)
@@ -155,50 +155,10 @@ impl<S: Seekable> Seekable for Merger<S> {
 
 #[cfg(test)]
 mod test {
-    use crate::seekable::{Iter, Seekable};
+    use crate::seekable::vec::SeekableVec;
+    use crate::Seekable;
     use std::cmp::Ordering;
 
-    #[derive(Debug)]
-    struct SeekableVec<T: Ord + Copy> {
-        off: usize,
-        v: Vec<T>,
-    }
-    impl<T: Ord + Copy> IntoIterator for SeekableVec<T> {
-        type Item = (T, ());
-        type IntoIter = Iter<Self>;
-        fn into_iter(self) -> Iter<Self> {
-            Iter(self)
-        }
-    }
-    impl<T: Ord + Copy> Seekable for SeekableVec<T> {
-        type Key = T;
-        type Value = ();
-        fn next(&mut self) -> Option<(T, ())> {
-            if self.off >= self.v.len() {
-                return None;
-            }
-            let v = self.v[self.off];
-            self.off += 1;
-            Some((v, ()))
-        }
-        fn seek(&mut self, key: &T) {
-            self.off = 0;
-            while self.off < self.v.len() {
-                if self.v[self.off] >= *key {
-                    break;
-                }
-                self.off += 1;
-            }
-        }
-    }
-    impl<T: Ord + Copy> From<Vec<T>> for SeekableVec<T> {
-        fn from(vec: Vec<T>) -> SeekableVec<T> {
-            let mut sv = SeekableVec { off: 0, v: vec };
-            sv.v.sort();
-            sv
-        }
-    }
-
     #[test]
     fn test_seekablevec() {
         let mut v = vec![3, 1, 4, 1, 5, 9];
diff --git a/src/seekable/vec.rs b/src/seekable/vec.rs
new file mode 100644 (file)
index 0000000..17e7559
--- /dev/null
@@ -0,0 +1,43 @@
+use crate::seekable::Iter;
+use crate::Seekable;
+
+#[derive(Debug)]
+pub struct SeekableVec<T: Ord + Copy> {
+    off: usize,
+    v: Vec<T>,
+}
+impl<T: Ord + Copy> IntoIterator for SeekableVec<T> {
+    type Item = (T, ());
+    type IntoIter = Iter<Self>;
+    fn into_iter(self) -> Iter<Self> {
+        Iter(self)
+    }
+}
+impl<T: Ord + Copy> Seekable for SeekableVec<T> {
+    type Key = T;
+    type Value = ();
+    fn next(&mut self) -> Option<(T, ())> {
+        if self.off >= self.v.len() {
+            return None;
+        }
+        let v = self.v[self.off];
+        self.off += 1;
+        Some((v, ()))
+    }
+    fn seek(&mut self, key: &T) {
+        self.off = 0;
+        while self.off < self.v.len() {
+            if self.v[self.off] >= *key {
+                break;
+            }
+            self.off += 1;
+        }
+    }
+}
+impl<T: Ord + Copy> From<Vec<T>> for SeekableVec<T> {
+    fn from(vec: Vec<T>) -> SeekableVec<T> {
+        let mut sv = SeekableVec { off: 0, v: vec };
+        sv.v.sort();
+        sv
+    }
+}