db::read -- io::Cursor instead of take
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
2022-11-09 21:31:38 +03:00
parent 6a3b3647b3
commit be6b17a8e2
2 changed files with 16 additions and 19 deletions

View File

@@ -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