1use crate::{ColumnFamily, DBIterator, DBRawIterator, Direction, Error, IteratorMode, ReadOptions};
2
3pub trait Iterate {
4 fn get_raw_iter<'a: 'b, 'b>(&'a self, readopts: &ReadOptions) -> DBRawIterator<'b>;
5
6 fn get_iter<'a: 'b, 'b>(
7 &'a self,
8 readopts: &ReadOptions,
9 mode: IteratorMode<'_>,
10 ) -> DBIterator<'b> {
11 let mut rv = DBIterator {
12 raw: self.get_raw_iter(readopts),
13 direction: Direction::Forward, just_seeked: false,
15 };
16 rv.set_mode(mode);
17 rv
18 }
19
20 fn iterator_opt<'a: 'b, 'b>(
21 &'a self,
22 mode: IteratorMode<'_>,
23 readopts: &ReadOptions,
24 ) -> DBIterator<'b> {
25 self.get_iter(readopts, mode)
26 }
27
28 fn iterator<'a: 'b, 'b>(&'a self, mode: IteratorMode<'_>) -> DBIterator<'b> {
29 let readopts = ReadOptions::default();
30 self.iterator_opt(mode, &readopts)
31 }
32
33 fn full_iterator<'a: 'b, 'b>(&'a self, mode: IteratorMode<'_>) -> DBIterator<'b> {
37 let mut opts = ReadOptions::default();
38 opts.set_total_order_seek(true);
39 self.get_iter(&opts, mode)
40 }
41
42 fn prefix_iterator<'a: 'b, 'b>(&'a self, prefix: &[u8]) -> DBIterator<'b> {
43 let mut opts = ReadOptions::default();
44 opts.set_prefix_same_as_start(true);
45 self.get_iter(&opts, IteratorMode::From(prefix, Direction::Forward))
46 }
47
48 fn raw_iterator<'a: 'b, 'b>(&'a self) -> DBRawIterator<'b> {
49 let opts = ReadOptions::default();
50 self.get_raw_iter(&opts)
51 }
52}
53
54pub trait IterateCF: Iterate {
55 fn get_raw_iter_cf<'a: 'b, 'b>(
56 &'a self,
57 cf_handle: &ColumnFamily,
58 readopts: &ReadOptions,
59 ) -> Result<DBRawIterator<'b>, Error>;
60
61 fn get_iter_cf<'a: 'b, 'b>(
62 &'a self,
63 cf_handle: &ColumnFamily,
64 readopts: &ReadOptions,
65 mode: IteratorMode<'_>,
66 ) -> Result<DBIterator<'b>, Error> {
67 let mut rv = DBIterator {
68 raw: self.get_raw_iter_cf(cf_handle, readopts)?,
69 direction: Direction::Forward, just_seeked: false,
71 };
72 rv.set_mode(mode);
73 Ok(rv)
74 }
75
76 fn iterator_cf_opt<'a: 'b, 'b>(
79 &'a self,
80 cf_handle: &ColumnFamily,
81 mode: IteratorMode<'_>,
82 readopts: &ReadOptions,
83 ) -> Result<DBIterator<'b>, Error> {
84 self.get_iter_cf(cf_handle, readopts, mode)
85 }
86
87 fn iterator_cf<'a: 'b, 'b>(
88 &'a self,
89 cf_handle: &ColumnFamily,
90 mode: IteratorMode<'_>,
91 ) -> Result<DBIterator<'b>, Error> {
92 let opts = ReadOptions::default();
93 self.get_iter_cf(cf_handle, &opts, mode)
94 }
95
96 fn full_iterator_cf<'a: 'b, 'b>(
97 &'a self,
98 cf_handle: &ColumnFamily,
99 mode: IteratorMode<'_>,
100 ) -> Result<DBIterator<'b>, Error> {
101 let mut opts = ReadOptions::default();
102 opts.set_total_order_seek(true);
103 self.get_iter_cf(cf_handle, &opts, mode)
104 }
105
106 fn prefix_iterator_cf<'a: 'b, 'b>(
107 &'a self,
108 cf_handle: &ColumnFamily,
109 prefix: &[u8],
110 ) -> Result<DBIterator<'b>, Error> {
111 let mut opts = ReadOptions::default();
112 opts.set_prefix_same_as_start(true);
113 self.get_iter_cf(
114 cf_handle,
115 &opts,
116 IteratorMode::From(prefix, Direction::Forward),
117 )
118 }
119
120 fn raw_iterator_cf<'a: 'b, 'b>(
121 &'a self,
122 cf_handle: &ColumnFamily,
123 ) -> Result<DBRawIterator<'b>, Error> {
124 let opts = ReadOptions::default();
125 self.get_raw_iter_cf(cf_handle, &opts)
126 }
127}