1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
mod range;
pub mod ranges_iter;
pub mod scanner;
pub mod test_fixture;
pub use self::range::*;
pub type Result<T> = std::result::Result<T, crate::error::StorageError>;
pub type OwnedKvPair = (Vec<u8>, Vec<u8>);
pub trait Storage: Send {
type Statistics;
fn begin_scan(
&mut self,
is_backward_scan: bool,
is_key_only: bool,
range: IntervalRange,
) -> Result<()>;
fn scan_next(&mut self) -> Result<Option<OwnedKvPair>>;
fn get(&mut self, is_key_only: bool, range: PointRange) -> Result<Option<OwnedKvPair>>;
fn met_uncacheable_data(&self) -> Option<bool>;
fn collect_statistics(&mut self, dest: &mut Self::Statistics);
}
impl<T: Storage + ?Sized> Storage for Box<T> {
type Statistics = T::Statistics;
fn begin_scan(
&mut self,
is_backward_scan: bool,
is_key_only: bool,
range: IntervalRange,
) -> Result<()> {
(**self).begin_scan(is_backward_scan, is_key_only, range)
}
fn scan_next(&mut self) -> Result<Option<OwnedKvPair>> {
(**self).scan_next()
}
fn get(&mut self, is_key_only: bool, range: PointRange) -> Result<Option<OwnedKvPair>> {
(**self).get(is_key_only, range)
}
fn met_uncacheable_data(&self) -> Option<bool> {
(**self).met_uncacheable_data()
}
fn collect_statistics(&mut self, dest: &mut Self::Statistics) {
(**self).collect_statistics(dest);
}
}