From 43fe7aca33274c2b753283005956b05d563926f5 Mon Sep 17 00:00:00 2001 From: Chris Mikkelson Date: Sun, 28 Apr 2024 15:46:14 -0500 Subject: [PATCH] SeekableVec: add value type. --- src/seekable/vec.rs | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/src/seekable/vec.rs b/src/seekable/vec.rs index 17e7559..9acb9df 100644 --- a/src/seekable/vec.rs +++ b/src/seekable/vec.rs @@ -2,42 +2,50 @@ use crate::seekable::Iter; use crate::Seekable; #[derive(Debug)] -pub struct SeekableVec { +pub struct SeekableVec { off: usize, - v: Vec, + v: Vec<(K, V)>, } -impl IntoIterator for SeekableVec { - type Item = (T, ()); +impl IntoIterator for SeekableVec { + type Item = (K, V); type IntoIter = Iter; fn into_iter(self) -> Iter { Iter(self) } } -impl Seekable for SeekableVec { - type Key = T; - type Value = (); - fn next(&mut self) -> Option<(T, ())> { +impl Seekable for SeekableVec { + type Key = K; + type Value = V; + fn next(&mut self) -> Option<(K, V)> { if self.off >= self.v.len() { return None; } let v = self.v[self.off]; self.off += 1; - Some((v, ())) + Some(v) } - fn seek(&mut self, key: &T) { + fn seek(&mut self, key: &K) { self.off = 0; while self.off < self.v.len() { - if self.v[self.off] >= *key { + if self.v[self.off].0 >= *key { break; } self.off += 1; } } } -impl From> for SeekableVec { - fn from(vec: Vec) -> SeekableVec { +impl From> for SeekableVec { + fn from(vec: Vec<(K, V)>) -> SeekableVec { let mut sv = SeekableVec { off: 0, v: vec }; sv.v.sort(); sv } } + +impl From> for SeekableVec { + fn from(vec: Vec) -> SeekableVec { + let mut pv = vec.into_iter().map(|k| (k, ())).collect::>(); + pv.sort(); + SeekableVec { off: 0, v: pv } + } +} -- 2.50.1