db::read -- io::Cursor instead of take
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
17
src/db.rs
17
src/db.rs
@@ -191,28 +191,25 @@ where
|
||||
return Err("index out of range".into());
|
||||
}
|
||||
|
||||
let next_pos: usize = (index + 1) * LEN_SIZE;
|
||||
let next_end: usize = next_pos + LEN_SIZE;
|
||||
|
||||
// read item data pos
|
||||
let data_pos = if 0 == index {
|
||||
self.first_pos
|
||||
} else {
|
||||
let tab_pos: usize = index * LEN_SIZE;
|
||||
let pos_curr_data: [u8; LEN_SIZE] = self.mmap[tab_pos..(tab_pos + LEN_SIZE)]
|
||||
.try_into()
|
||||
.str_err()?;
|
||||
let pos_curr_data: [u8; LEN_SIZE] =
|
||||
self.mmap[tab_pos..next_pos].try_into().str_err()?;
|
||||
LSize::from_le_bytes(pos_curr_data)
|
||||
} as usize;
|
||||
|
||||
// read next item pos
|
||||
let next_pos: usize = (index + 1) * LEN_SIZE;
|
||||
let pos_next_data: [u8; LEN_SIZE] = self.mmap[next_pos..(next_pos + LEN_SIZE)]
|
||||
.try_into()
|
||||
.str_err()?;
|
||||
let pos_next_data: [u8; LEN_SIZE] = self.mmap[next_pos..next_end].try_into().str_err()?;
|
||||
let data_pos_next = LSize::from_le_bytes(pos_next_data) as usize;
|
||||
// calc item data length
|
||||
let data_len = data_pos_next - data_pos;
|
||||
|
||||
// read & unpack item data
|
||||
let reader = self.mmap[data_pos..data_pos_next].take(data_len as u64);
|
||||
let reader = io::Cursor::new(self.mmap[data_pos..data_pos_next].as_ref());
|
||||
let data = zstd::decode_all(reader).str_err()?;
|
||||
|
||||
// decode item
|
||||
|
||||
Reference in New Issue
Block a user