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{}