+52
-45
src/reftable/basics.rs
+52
-45
src/reftable/basics.rs
···
1
-
#[derive(Debug, Clone)]
2
-
pub struct ReftableBuf {
3
-
pub data: Vec<u8>,
4
-
pub len: usize,
5
-
}
1
+
use crate::reftable::{
2
+
error::ReftableError,
3
+
record::{REFTABLE_HASH_SIZE_SHA1, REFTABLE_HASH_SIZE_SHA256},
4
+
reftable_basics::ReftableBuf,
5
+
};
6
6
7
-
impl ReftableBuf {
8
-
pub fn new() -> Self {
9
-
Self {
10
-
data: Vec::new(),
11
-
len: 0,
12
-
}
13
-
}
7
+
pub fn binsearch<F, T>(sz: usize, mut f: F, args: &T) -> usize
8
+
where
9
+
F: FnMut(usize, &T) -> Result<isize, String>,
10
+
{
11
+
let mut lo = 0usize;
12
+
let mut hi = sz;
14
13
15
-
pub fn with_capacity(capacity: usize) -> Self {
16
-
Self {
17
-
data: Vec::with_capacity(capacity),
18
-
len: 0,
14
+
while hi - lo > 1 {
15
+
let mid = lo + (hi - lo) / 2;
16
+
let ret = f(mid, args).unwrap();
17
+
18
+
if ret < 0 {
19
+
return sz;
19
20
}
20
-
}
21
21
22
-
pub fn clear(&mut self) {
23
-
self.data.clear();
24
-
self.len = 0;
22
+
if ret > 0 {
23
+
hi = mid;
24
+
} else {
25
+
lo = mid;
26
+
}
25
27
}
26
28
27
-
pub fn as_slice(&self) -> &[u8] {
28
-
&self.data[..self.len]
29
+
if lo != 0 {
30
+
return hi;
29
31
}
30
-
}
31
32
32
-
impl Default for ReftableBuf {
33
-
fn default() -> Self {
34
-
Self::new()
35
-
}
33
+
return if f(0, args).unwrap() == 1 { 1 } else { 0 };
36
34
}
37
35
38
-
pub fn binsearch<F>(sz: usize, mut f: F) -> usize
39
-
where
40
-
F: FnMut(usize) -> Result<bool, String>,
41
-
{
42
-
todo!()
36
+
pub fn names_length(names: &[&str]) -> usize {
37
+
names.len()
43
38
}
44
39
45
-
pub fn names_length(names: &[&str]) -> usize {
46
-
todo!()
40
+
pub fn parse_names(buf: &str) -> Result<Vec<String>, ReftableError> {
41
+
if !buf.ends_with('\n') {
42
+
return Err(ReftableError::Format);
43
+
}
44
+
let mut names = buf
45
+
.split('\n')
46
+
.map(|name| name.trim().to_string())
47
+
.filter(|name| !name.is_empty())
48
+
.collect::<Vec<String>>();
49
+
names.push(String::new());
50
+
Ok(names)
47
51
}
48
52
49
-
pub fn parse_names(buf: &str) -> Result<Vec<String>, String> {
50
-
todo!()
53
+
pub fn names_equal(a: &[&str], b: &[&str]) -> bool {
54
+
a.len() == b.len() && a.iter().zip(b.iter()).all(|(a, b)| a == b)
51
55
}
52
56
53
57
pub fn common_prefix_size(a: &ReftableBuf, b: &ReftableBuf) -> usize {
54
-
todo!()
58
+
let mut i = 0usize;
59
+
while i < a.len() && i < b.len() && a[i] == b[i] {
60
+
i += 1;
61
+
}
62
+
i
55
63
}
56
64
57
65
pub enum HashAlgorithm {
···
59
67
Sha256 = 247,
60
68
}
61
69
62
-
pub fn hash_size(id: HashAlgorithm) -> u32 {
63
-
todo!()
64
-
}
65
-
66
-
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
67
-
pub enum ReftableHash {
68
-
ReftableHashSha1 = 89,
69
-
ReftableHashSha256 = 247,
70
+
impl HashAlgorithm {
71
+
pub fn size(&self) -> usize {
72
+
match self {
73
+
HashAlgorithm::Sha1 => REFTABLE_HASH_SIZE_SHA1,
74
+
HashAlgorithm::Sha256 => REFTABLE_HASH_SIZE_SHA256,
75
+
}
76
+
}
70
77
}
+1
-1
src/reftable/block.rs
+1
-1
src/reftable/block.rs
+1
-1
src/reftable/iter.rs
+1
-1
src/reftable/iter.rs
+1
-1
src/reftable/record.rs
+1
-1
src/reftable/record.rs
+2
-2
src/reftable/reftable_basics.rs
+2
-2
src/reftable/reftable_basics.rs
···
1
1
use std::ffi::{c_char, c_uchar};
2
2
3
3
/* A buffer that contains arbitrary byte slices. */
4
-
type ReftableBuf = Vec<c_char>;
4
+
pub type ReftableBuf = Vec<c_char>;
5
5
6
6
/*
7
7
* Hash functions understood by the reftable library. Note that the values are
8
8
* arbitrary and somewhat random such that we can easily detect cases where the
9
9
* hash hasn't been properly set up.
10
10
*/
11
-
enum ReftableHash {
11
+
pub enum ReftableHash {
12
12
ReftableHashSha1 = 89,
13
13
ReftableHashSha256 = 247,
14
14
}
+2
-2
src/reftable/reftable_table.rs
+2
-2
src/reftable/reftable_table.rs
···
1
1
use crate::reftable::{
2
-
basics::ReftableHash, block::ReftableBlock, blocksource::ReftableBlockSource, iter::Void,
3
-
reftable_iterator::ReftableIterator,
2
+
block::ReftableBlock, blocksource::ReftableBlockSource, iter::Void,
3
+
reftable_basics::ReftableHash, reftable_iterator::ReftableIterator,
4
4
};
5
5
6
6
pub struct ReftableTableOffsets {
History
1 round
0 comments
thecoded.prof
submitted
#0
1 commit
expand
collapse
feat: convert basics.rs
expand 0 comments
closed without merging