{
source: S,
#[allow(clippy::type_complexity)]
- // Attempting to factor out the `::Item` type removes the ability to use the
- // implicit '_ lifetime.
- dupsort_func:
- Box<dyn Fn(&<S::Iter<'_> as Iterator>::Item, &<S::Iter<'_> as Iterator>::Item) -> Ordering>,
+ dupsort_func: Box<dyn Fn(&S::Item, &S::Item) -> Ordering>,
}
impl<S> DupsortSource<S>
{
pub fn new<F>(source: S, dupsort_func: F) -> Self
where
- F: Fn(&<S::Iter<'_> as Iterator>::Item, &<S::Iter<'_> as Iterator>::Item) -> Ordering
- + 'static,
+ F: Fn(&S::Item, &S::Item) -> Ordering + 'static,
{
Self {
source,
impl<S> Source for DupsortSource<S>
where
- S: Source + 'static,
- for<'i> <S::Iter<'i> as Iterator>::Item: PartialEq,
+ S: Source,
+ S::Item: PartialEq,
{
- type Iter<'i> = DupsortIter<
- S::Iter<'i>,
- &'i dyn Fn(&<S::Iter<'_> as Iterator>::Item, &<S::Iter<'_> as Iterator>::Item) -> Ordering,
- >;
-
- fn iter(&self) -> Self::Iter<'_> {
+ type Item = S::Item;
+ fn iter(&self) -> impl SeekableIter<Item = Self::Item> {
self.source.iter().dupsort_func(&self.dupsort_func)
}
}
{
source: S,
#[allow(clippy::type_complexity)]
- filter_func: Box<dyn Fn(&<S::Iter<'_> as Iterator>::Item, &mut Vec<u8>) -> bool>,
+ filter_func: Box<dyn Fn(&S::Item, &mut Vec<u8>) -> bool>,
}
impl<S> FilterSource<S>
{
pub fn new<F>(source: S, filter_func: F) -> Self
where
- F: Fn(&<S::Iter<'_> as Iterator>::Item, &mut Vec<u8>) -> bool + 'static,
+ F: Fn(&S::Item, &mut Vec<u8>) -> bool + 'static,
{
Self {
source,
impl<S> Source for FilterSource<S>
where
- S: Source + 'static,
+ S: Source,
{
- type Iter<'i> =
- FilterIter<S::Iter<'i>, &'i dyn Fn(&<S::Iter<'_> as Iterator>::Item, &mut Vec<u8>) -> bool>;
- fn iter(&self) -> Self::Iter<'_> {
+ type Item = S::Item;
+ fn iter(&self) -> impl SeekableIter<Item = Self::Item> {
self.source.iter().filter_func(&self.filter_func)
}
}
use crate::{Entry, SeekableIter};
pub trait Source {
- type Iter<'i>: SeekableIter
- where
- Self: 'i;
+ type Item;
- fn iter(&self) -> Self::Iter<'_>;
- fn get(&self, key: &[u8]) -> RangeIter<Self::Iter<'_>>
+ fn iter(&self) -> impl SeekableIter<Item = Self::Item>;
+ fn get(&self, key: &[u8]) -> RangeIter<impl SeekableIter<Item = Self::Item>>
where
- for<'a> <Self::Iter<'a> as Iterator>::Item: PartialOrd<[u8]>,
+ Self::Item: PartialOrd<[u8]>,
{
RangeIter::new(self.iter(), key, key)
}
- fn get_prefix(&self, prefix: &[u8]) -> PrefixIter<Self::Iter<'_>>
+ fn get_prefix(&self, prefix: &[u8]) -> PrefixIter<impl SeekableIter<Item = Self::Item>>
where
- for<'a> <Self::Iter<'a> as Iterator>::Item: AsRef<[u8]>,
+ Self::Item: AsRef<[u8]>,
{
PrefixIter::new(self.iter(), prefix)
}
- fn get_range(&self, start: &[u8], end: &[u8]) -> RangeIter<Self::Iter<'_>>
+ fn get_range(&self, start: &[u8], end: &[u8]) -> RangeIter<impl SeekableIter<Item = Self::Item>>
where
- for<'a> <Self::Iter<'a> as Iterator>::Item: PartialOrd<[u8]>,
+ Self::Item: PartialOrd<[u8]>,
{
RangeIter::new(self.iter(), start, end)
}
fn dupsort_func<F>(self, dupsort_func: F) -> DupsortSource<Self>
where
Self: Sized,
- F: Fn(
- &<Self::Iter<'_> as Iterator>::Item,
- &<Self::Iter<'_> as Iterator>::Item,
- ) -> std::cmp::Ordering
- + 'static,
+ F: Fn(&Self::Item, &Self::Item) -> std::cmp::Ordering + 'static,
{
DupsortSource::new(self, dupsort_func)
}
fn filter<F>(self, filter_func: F) -> FilterSource<Self>
where
Self: Sized,
- F: Fn(&<Self::Iter<'_> as Iterator>::Item, &mut Vec<u8>) -> bool + 'static,
+ F: Fn(&Self::Item, &mut Vec<u8>) -> bool + 'static,
{
FilterSource::new(self, filter_func)
}
}
-impl<S: Source + ?Sized + 'static> Source for Box<S> {
- type Iter<'i> = Box<dyn SeekableIter<Item = <S::Iter<'i> as Iterator>::Item> + 'i>;
- fn iter(&self) -> Self::Iter<'_> {
+impl<S: Source + ?Sized> Source for Box<S> {
+ type Item = S::Item;
+ fn iter(&self) -> impl SeekableIter<Item = Self::Item> {
Box::new(self.as_ref().iter())
}
}
}
impl Source for Vec<Entry> {
- type Iter<'i> = VecIter<'i>;
- fn iter(&self) -> Self::Iter<'_> {
+ type Item = Entry;
+ fn iter(&self) -> impl SeekableIter<Item = Self::Item> {
VecIter {
index: 0,
vec: self,
}
impl Source for TestSource {
- type Iter<'i> = TestIter<'i>;
- fn iter(&self) -> Self::Iter<'_> {
+ type Item = Entry;
+ fn iter(&self) -> impl SeekableIter<Item = Self::Item> {
TestIter {
source: self,
off: 0,