seekable_iterator/
seekable_iterators.rs

1use crate::{comparator::Comparator, seekable::Seekable};
2use crate::cursor::{CursorIterator, CursorLendingIterator, CursorPooledIterator};
3
4
5/// An [`Iterator`] with cursor methods from [`CursorIterator`] and the ability to seek from
6/// [`Seekable`].
7///
8/// See [`CursorIterator`] for more.
9pub trait SeekableIterator<Key, Cmp>
10where
11    Key: ?Sized,
12    Cmp: ?Sized + Comparator<Key>,
13    Self: CursorIterator + Seekable<Key, Cmp>,
14{}
15
16impl<Key, Cmp, I> SeekableIterator<Key, Cmp> for I
17where
18    Key: ?Sized,
19    Cmp: ?Sized + Comparator<Key>,
20    I: CursorIterator + Seekable<Key, Cmp>,
21{}
22
23/// A lending iterator with cursor methods from [`CursorLendingIterator`] and the ability to seek
24/// from [`Seekable`].
25///
26/// As a lending iterator, only one entry can be accessed at a time.
27///
28/// See [`CursorLendingIterator`] for more.
29pub trait SeekableLendingIterator<Key, Cmp>
30where
31    Key: ?Sized,
32    Cmp: ?Sized + Comparator<Key>,
33    Self: CursorLendingIterator + Seekable<Key, Cmp>,
34{}
35
36impl<Key, Cmp, I> SeekableLendingIterator<Key, Cmp> for I
37where
38    Key: ?Sized,
39    Cmp: ?Sized + Comparator<Key>,
40    I: CursorLendingIterator + Seekable<Key, Cmp>,
41{}
42
43/// A [`PooledIterator`] with cursor methods from [`CursorPooledIterator`] and the ability
44/// to seek from [`Seekable`].
45///
46/// The iterator is similar to a lending iterator (which can lend one item at a time), but can
47/// make use of a buffer pool to lend out multiple items at a time.
48///
49/// See [`CursorPooledIterator`] for more.
50///
51/// [`PooledIterator`]: crate::pooled::PooledIterator
52pub trait SeekablePooledIterator<Key, Cmp>
53where
54    Key: ?Sized,
55    Cmp: ?Sized + Comparator<Key>,
56    Self: CursorPooledIterator + Seekable<Key, Cmp>,
57{}
58
59impl<Key, Cmp, I> SeekablePooledIterator<Key, Cmp> for I
60where
61    Key: ?Sized,
62    Cmp: ?Sized + Comparator<Key>,
63    I: CursorPooledIterator + Seekable<Key, Cmp>,
64{}