From 90b85db05b271bc432c39db2a64bd9c7fae7fd27 Mon Sep 17 00:00:00 2001 From: Chris Mikkelson Date: Thu, 3 Apr 2025 16:23:16 -0500 Subject: [PATCH] Rename Iter -> SeekableIter --- src/dupsort_func.rs | 20 ++++++++++---------- src/filter.rs | 28 ++++++++++++++-------------- src/iter.rs | 20 ++++++++++---------- src/lib.rs | 2 +- src/merge_func.rs | 14 +++++++------- src/merger.rs | 28 ++++++++++++++-------------- src/reader/block.rs | 6 +++--- src/reader/mod.rs | 6 +++--- src/source.rs | 22 +++++++++++----------- 9 files changed, 73 insertions(+), 73 deletions(-) diff --git a/src/dupsort_func.rs b/src/dupsort_func.rs index c029c29..a9b8b92 100644 --- a/src/dupsort_func.rs +++ b/src/dupsort_func.rs @@ -1,5 +1,5 @@ use crate::entry::HasPrefix; -use crate::{Iter, Source}; +use crate::{SeekableIter, Source}; use std::cmp::Ordering; pub struct DupsortFunc @@ -31,16 +31,16 @@ where F: Fn(&S::Item, &S::Item) -> Ordering, { type Item = S::Item; - fn iter(&self) -> impl Iter { + fn iter(&self) -> impl SeekableIter { self.source.iter().dupsort_func(&self.dupsort_func) } - fn get(&self, key: &[u8]) -> impl Iter + fn get(&self, key: &[u8]) -> impl SeekableIter where S::Item: PartialOrd<[u8]>, { self.source.get(key).dupsort_func(&self.dupsort_func) } - fn get_prefix(&self, prefix: &[u8]) -> impl Iter + fn get_prefix(&self, prefix: &[u8]) -> impl SeekableIter where S::Item: HasPrefix, { @@ -48,7 +48,7 @@ where .get_prefix(prefix) .dupsort_func(&self.dupsort_func) } - fn get_range(&self, start: &[u8], end: &[u8]) -> impl Iter + fn get_range(&self, start: &[u8], end: &[u8]) -> impl SeekableIter where S::Item: PartialOrd<[u8]>, { @@ -61,7 +61,7 @@ where #[derive(Debug)] pub struct DupsortFuncIter<'a, I, F> where - I: Iter, + I: SeekableIter, F: Fn(&I::Item, &I::Item) -> Ordering, { run: Vec, @@ -72,7 +72,7 @@ where impl<'a, I, F> DupsortFuncIter<'a, I, F> where - I: Iter, + I: SeekableIter, F: Fn(&I::Item, &I::Item) -> Ordering, { pub fn new(iter: I, dupsort_func: &'a F) -> Self { @@ -87,7 +87,7 @@ where impl<'a, I, F> Iterator for DupsortFuncIter<'a, I, F> where - I: Iter, + I: SeekableIter, I::Item: PartialEq, F: Fn(&I::Item, &I::Item) -> Ordering, { @@ -115,9 +115,9 @@ where } } -impl<'a, I, F> Iter for DupsortFuncIter<'a, I, F> +impl<'a, I, F> SeekableIter for DupsortFuncIter<'a, I, F> where - I: Iter, + I: SeekableIter, I::Item: PartialEq, F: Fn(&I::Item, &I::Item) -> Ordering, { diff --git a/src/filter.rs b/src/filter.rs index eb31ee1..459c50f 100644 --- a/src/filter.rs +++ b/src/filter.rs @@ -1,4 +1,4 @@ -use crate::{entry::HasPrefix, Iter, Source}; +use crate::{entry::HasPrefix, SeekableIter, Source}; pub struct FilterIter<'a, I, F> { iter: I, @@ -7,8 +7,8 @@ pub struct FilterIter<'a, I, F> { impl<'a, I, F> FilterIter<'a, I, F> where - I: Iter, - F: Fn(&I::Item, &mut dyn Iter) -> bool, + I: SeekableIter, + F: Fn(&I::Item, &mut dyn SeekableIter) -> bool, { pub fn new(iter: I, filter_func: &'a F) -> Self { Self { iter, filter_func } @@ -17,8 +17,8 @@ where impl<'a, I, F> Iterator for FilterIter<'a, I, F> where - I: Iter, - F: Fn(&I::Item, &mut dyn Iter) -> bool, + I: SeekableIter, + F: Fn(&I::Item, &mut dyn SeekableIter) -> bool, { type Item = I::Item; @@ -32,10 +32,10 @@ where } } -impl<'a, I, F> Iter for FilterIter<'a, I, F> +impl<'a, I, F> SeekableIter for FilterIter<'a, I, F> where - I: Iter, - F: Fn(&I::Item, &mut dyn Iter) -> bool, + I: SeekableIter, + F: Fn(&I::Item, &mut dyn SeekableIter) -> bool, { fn seek(&mut self, key: &[u8]) { self.iter.seek(key); @@ -50,7 +50,7 @@ pub struct FilterSource { impl FilterSource where S: Source, - F: Fn(&S::Item, &mut dyn Iter) -> bool, + F: Fn(&S::Item, &mut dyn SeekableIter) -> bool, { pub fn new(source: S, filter_func: F) -> Self { Self { @@ -63,21 +63,21 @@ where impl Source for FilterSource where S: Source, - F: Fn(&S::Item, &mut dyn Iter) -> bool, + F: Fn(&S::Item, &mut dyn SeekableIter) -> bool, { type Item = S::Item; - fn iter(&self) -> impl Iter { + fn iter(&self) -> impl SeekableIter { self.source.iter().filter_func(&self.filter_func) } - fn get(&self, key: &[u8]) -> impl Iter + fn get(&self, key: &[u8]) -> impl SeekableIter where Self::Item: PartialOrd<[u8]>, { self.source.get(key).filter_func(&self.filter_func) } - fn get_prefix(&self, prefix: &[u8]) -> impl Iter + fn get_prefix(&self, prefix: &[u8]) -> impl SeekableIter where Self::Item: HasPrefix, { @@ -86,7 +86,7 @@ where .filter_func(&self.filter_func) } - fn get_range(&self, start: &[u8], end: &[u8]) -> impl Iter + fn get_range(&self, start: &[u8], end: &[u8]) -> impl SeekableIter where Self::Item: PartialOrd<[u8]>, { diff --git a/src/iter.rs b/src/iter.rs index d47fa06..0a7209c 100644 --- a/src/iter.rs +++ b/src/iter.rs @@ -6,7 +6,7 @@ use crate::Entry; use std::cmp::Ordering; use std::iter::Iterator; -pub trait Iter: Iterator { +pub trait SeekableIter: Iterator { fn seek(&mut self, key: &[u8]); fn merge_func<'a, F>(self, merge_func: &'a F) -> MergeFuncIter<'a, Self, F> @@ -27,7 +27,7 @@ pub trait Iter: Iterator { fn filter_func<'a, F>(self, filter_func: &'a F) -> FilterIter<'a, Self, F> where - F: Fn(&Self::Item, &mut dyn Iter) -> bool, + F: Fn(&Self::Item, &mut dyn SeekableIter) -> bool, Self: Sized, { FilterIter::new(self, filter_func) @@ -41,7 +41,7 @@ pub struct PrefixIter { impl PrefixIter where - I: Iter, + I: SeekableIter, E: HasPrefix, { pub fn new(mut iter: I, prefix: impl AsRef<[u8]>) -> Self { @@ -55,7 +55,7 @@ where impl Iterator for PrefixIter where - I: Iter, + I: SeekableIter, E: HasPrefix, { type Item = E; @@ -69,9 +69,9 @@ where } } -impl Iter for PrefixIter +impl SeekableIter for PrefixIter where - I: Iter, + I: SeekableIter, E: HasPrefix, { fn seek(&mut self, key: &[u8]) { @@ -85,7 +85,7 @@ pub struct RangeIter { end: Vec, } -impl RangeIter { +impl RangeIter { pub fn new(mut iter: I, start: impl AsRef<[u8]>, end: impl AsRef<[u8]>) -> Self { iter.seek(start.as_ref()); Self { @@ -98,7 +98,7 @@ impl RangeIter { impl Iterator for RangeIter where - I: Iter, + I: SeekableIter, E: PartialOrd<[u8]>, { type Item = E; @@ -112,9 +112,9 @@ where } } -impl Iter for RangeIter +impl SeekableIter for RangeIter where - I: Iter, + I: SeekableIter, E: PartialOrd<[u8]>, { fn seek(&mut self, key: &[u8]) { diff --git a/src/lib.rs b/src/lib.rs index f9b4240..5a56711 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -13,7 +13,7 @@ mod writer; pub use compression::Compression; pub use entry::Entry; pub use fileset::Fileset; -pub use iter::Iter; +pub use iter::SeekableIter; pub use merger::Merger; pub use reader::Reader; pub use source::Source; diff --git a/src/merge_func.rs b/src/merge_func.rs index c0800ea..7f55bd6 100644 --- a/src/merge_func.rs +++ b/src/merge_func.rs @@ -1,4 +1,4 @@ -use crate::{Entry, Iter, Source}; +use crate::{Entry, SeekableIter, Source}; pub struct MergeFunc, &Entry)> { source: S, @@ -21,16 +21,16 @@ where F: Fn(&mut Vec, &Entry), { type Item = Entry; - fn iter(&self) -> impl Iter { + fn iter(&self) -> impl SeekableIter { self.source.iter().merge_func(&self.merge_func) } - fn get(&self, key: &[u8]) -> impl Iter { + fn get(&self, key: &[u8]) -> impl SeekableIter { self.source.get(key).merge_func(&self.merge_func) } - fn get_prefix(&self, prefix: &[u8]) -> impl Iter { + fn get_prefix(&self, prefix: &[u8]) -> impl SeekableIter { self.source.get_prefix(prefix).merge_func(&self.merge_func) } - fn get_range(&self, start: &[u8], end: &[u8]) -> impl Iter { + fn get_range(&self, start: &[u8], end: &[u8]) -> impl SeekableIter { self.source .get_range(start, end) .merge_func(&self.merge_func) @@ -76,9 +76,9 @@ where } } -impl<'a, I, F> Iter for MergeFuncIter<'a, I, F> +impl<'a, I, F> SeekableIter for MergeFuncIter<'a, I, F> where - I: Iter, + I: SeekableIter, F: Fn(&mut Vec, &Entry), { fn seek(&mut self, key: &[u8]) { diff --git a/src/merger.rs b/src/merger.rs index 8d54303..3c99c1a 100644 --- a/src/merger.rs +++ b/src/merger.rs @@ -1,4 +1,4 @@ -use crate::{Entry, Iter, Source}; +use crate::{Entry, SeekableIter, Source}; use std::cmp::Ordering; use std::collections::BinaryHeap; @@ -17,31 +17,31 @@ where } } -struct MergeEntry { +struct MergeEntry { e: Entry, it: I, } -impl PartialEq for MergeEntry { +impl PartialEq for MergeEntry { fn eq(&self, other: &Self) -> bool { self.e.key() == other.e.key() } } -impl Eq for MergeEntry {} +impl Eq for MergeEntry {} -impl PartialOrd for MergeEntry { +impl PartialOrd for MergeEntry { fn partial_cmp(&self, other: &Self) -> Option { Some(other.e.key().cmp(&self.e.key())) } } -impl Ord for MergeEntry { +impl Ord for MergeEntry { fn cmp(&self, other: &Self) -> Ordering { other.e.key().cmp(&self.e.key()) } } -pub struct MergeIter { +pub struct MergeIter { heap: BinaryHeap>, finished: Vec, last_key: Vec, @@ -50,7 +50,7 @@ pub struct MergeIter { impl From for MergeIter where I: Iterator, - I::Item: Iter, + I::Item: SeekableIter, { fn from(iters: I) -> Self { let mut v: Vec = Vec::new(); @@ -69,7 +69,7 @@ where } } -impl> Iterator for MergeIter { +impl> Iterator for MergeIter { type Item = Entry; fn next(&mut self) -> Option { @@ -89,7 +89,7 @@ impl> Iterator for MergeIter { } } -impl> Iter for MergeIter { +impl> SeekableIter for MergeIter { fn seek(&mut self, key: &[u8]) { if key > self.last_key.as_slice() { loop { @@ -136,19 +136,19 @@ impl> Iter for MergeIter { impl> Source for Merger { type Item = Entry; - fn iter(&self) -> impl Iter { + fn iter(&self) -> impl SeekableIter { MergeIter::from(self.sources.iter().map(|s| s.iter())) } - fn get(&self, key: &[u8]) -> impl Iter { + fn get(&self, key: &[u8]) -> impl SeekableIter { MergeIter::from(self.sources.iter().map(|s| s.get(key))) } - fn get_prefix(&self, prefix: &[u8]) -> impl Iter { + fn get_prefix(&self, prefix: &[u8]) -> impl SeekableIter { MergeIter::from(self.sources.iter().map(|s| s.get_prefix(prefix))) } - fn get_range(&self, start: &[u8], end: &[u8]) -> impl Iter { + fn get_range(&self, start: &[u8], end: &[u8]) -> impl SeekableIter { MergeIter::from(self.sources.iter().map(|s| s.get_range(start, end))) } } diff --git a/src/reader/block.rs b/src/reader/block.rs index b6abaad..0563108 100644 --- a/src/reader/block.rs +++ b/src/reader/block.rs @@ -1,4 +1,4 @@ -use crate::{Entry, Iter, Result}; +use crate::{Entry, Result, SeekableIter}; use integer_encoding::VarInt; use std::mem::size_of; @@ -189,7 +189,7 @@ impl> Iterator for BlockIter { } } -impl> Iter for BlockIter { +impl> SeekableIter for BlockIter { fn seek(&mut self, key: &[u8]) { // TODO: "galloping search" if self.block.restart_count > 0 { @@ -216,7 +216,7 @@ mod test { use crate::reader::block::Block; use crate::writer::block_builder::BlockBuilder; use crate::Entry; - use crate::Iter; + use crate::SeekableIter; fn build_block(n: u32, skip: u32, r: usize) -> Block> { let mut bb = BlockBuilder::default(); diff --git a/src/reader/mod.rs b/src/reader/mod.rs index 8a1568c..4ba0d7e 100644 --- a/src/reader/mod.rs +++ b/src/reader/mod.rs @@ -1,6 +1,6 @@ use crate::metadata::Metadata; use crate::Source; -use crate::{Entry, Iter}; +use crate::{Entry, SeekableIter}; use integer_encoding::VarInt; pub(crate) mod block; use crate::compression::CBuf; @@ -155,7 +155,7 @@ impl> Iterator for ReaderIter { } } -impl> Iter for ReaderIter { +impl> SeekableIter for ReaderIter { fn seek(&mut self, key: &[u8]) { // TODO: detect and skip unneeded seek in iter. self.index_iter.seek(key); @@ -179,7 +179,7 @@ impl> Iter for ReaderIter { impl> Source for Reader { type Item = Entry; - fn iter(&self) -> impl Iter { + fn iter(&self) -> impl SeekableIter { ReaderIter { reader: self.clone(), next_offset: 0, diff --git a/src/source.rs b/src/source.rs index 55e0317..c7c6c00 100644 --- a/src/source.rs +++ b/src/source.rs @@ -3,25 +3,25 @@ use crate::entry::HasPrefix; use crate::filter::FilterSource; use crate::iter::{PrefixIter, RangeIter}; use crate::merge_func::MergeFunc; -use crate::{Entry, Iter}; +use crate::{Entry, SeekableIter}; pub trait Source { type Item; - fn iter(&self) -> impl Iter; - fn get(&self, key: &[u8]) -> impl Iter + fn iter(&self) -> impl SeekableIter; + fn get(&self, key: &[u8]) -> impl SeekableIter where Self::Item: PartialOrd<[u8]>, { RangeIter::new(self.iter(), key, key) } - fn get_prefix(&self, prefix: &[u8]) -> impl Iter + fn get_prefix(&self, prefix: &[u8]) -> impl SeekableIter where Self::Item: HasPrefix, { PrefixIter::new(self.iter(), prefix) } - fn get_range(&self, start: &[u8], end: &[u8]) -> impl Iter + fn get_range(&self, start: &[u8], end: &[u8]) -> impl SeekableIter where Self::Item: PartialOrd<[u8]>, { @@ -47,7 +47,7 @@ pub trait Source { fn filter(self, filter_func: F) -> FilterSource where Self: Sized, - F: Fn(&Self::Item, &mut dyn Iter) -> bool, + F: Fn(&Self::Item, &mut dyn SeekableIter) -> bool, { FilterSource::new(self, filter_func) } @@ -71,7 +71,7 @@ impl<'a> Iterator for VecIter<'a> { } } -impl<'a> Iter for VecIter<'a> { +impl<'a> SeekableIter for VecIter<'a> { fn seek(&mut self, key: &[u8]) { let mut left = 0; let mut right = self.vec.len() - 1; @@ -89,7 +89,7 @@ impl<'a> Iter for VecIter<'a> { impl Source for Vec { type Item = Entry; - fn iter(&self) -> impl Iter { + fn iter(&self) -> impl SeekableIter { VecIter { index: 0, vec: self, @@ -100,7 +100,7 @@ impl Source for Vec { #[cfg(test)] pub mod test_source { use crate::Entry; - use crate::Iter; + use crate::SeekableIter; use crate::Source; pub struct TestSource(pub Vec); @@ -124,7 +124,7 @@ pub mod test_source { } } - impl<'a> Iter for TestIter<'a> { + impl<'a> SeekableIter for TestIter<'a> { fn seek(&mut self, key: &[u8]) { self.off = 0; while self.off < self.source.0.len() && self.source.0[self.off].key() < key { @@ -135,7 +135,7 @@ pub mod test_source { impl Source for TestSource { type Item = Entry; - fn iter(&self) -> impl Iter { + fn iter(&self) -> impl SeekableIter { TestIter { source: self, off: 0, -- 2.50.1