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.
9///
10/// All implementations are automatically provided by a blanket impl.
11pub trait SeekableIterator<Key, Cmp>: CursorIterator + Seekable<Key, Cmp>
12where
13    Key: ?Sized,
14    Cmp: ?Sized + Comparator<Key>,
15{}
16
17impl<Key, Cmp, I> SeekableIterator<Key, Cmp> for I
18where
19    Key: ?Sized,
20    Cmp: ?Sized + Comparator<Key>,
21    I: CursorIterator + Seekable<Key, Cmp>,
22{}
23
24/// A lending iterator with cursor methods from [`CursorLendingIterator`] and the ability to seek
25/// from [`Seekable`].
26///
27/// As a lending iterator, only one entry can be accessed at a time.
28///
29/// See [`CursorLendingIterator`] for more.
30///
31/// All implementations are automatically provided by a blanket impl.
32///
33/// # Note
34/// Types which implement [`SeekableLendingIterator`] should strongly consider implementing
35/// [`ItemToKey`] as well.
36///
37/// [`ItemToKey`]: crate::seekable::ItemToKey
38pub trait SeekableLendingIterator<Key, Cmp>: CursorLendingIterator + Seekable<Key, Cmp>
39where
40    Key: ?Sized,
41    Cmp: ?Sized + Comparator<Key>,
42{}
43
44impl<Key, Cmp, I> SeekableLendingIterator<Key, Cmp> for I
45where
46    Key: ?Sized,
47    Cmp: ?Sized + Comparator<Key>,
48    I: CursorLendingIterator + Seekable<Key, Cmp>,
49{}
50
51/// A [`PooledIterator`] with cursor methods from [`CursorPooledIterator`] and the ability
52/// to seek from [`Seekable`].
53///
54/// The iterator is similar to a lending iterator (which can lend one item at a time), but can
55/// make use of a buffer pool to lend out multiple items at a time.
56///
57/// See [`CursorPooledIterator`] for more.
58///
59/// All implementations are automatically provided by a blanket impl.
60///
61/// [`PooledIterator`]: crate::pooled::PooledIterator
62pub trait SeekablePooledIterator<Key, Cmp>: CursorPooledIterator + Seekable<Key, Cmp>
63where
64    Key: ?Sized,
65    Cmp: ?Sized + Comparator<Key>,
66{}
67
68impl<Key, Cmp, I> SeekablePooledIterator<Key, Cmp> for I
69where
70    Key: ?Sized,
71    Cmp: ?Sized + Comparator<Key>,
72    I: CursorPooledIterator + Seekable<Key, Cmp>,
73{}