append(): break out pub fn get_bytes_used()
This commit is contained in:
parent
e5f8b6b56e
commit
9153240b9b
21
src/lib.rs
21
src/lib.rs
|
@ -63,6 +63,17 @@ impl<B: StoreBackend> Store<B> {
|
|||
.transpose())
|
||||
}
|
||||
|
||||
/// how many bytes are currently used
|
||||
///
|
||||
/// equally, offset of free space
|
||||
pub fn get_bytes_used(&self) -> Result<usize, ReadError> {
|
||||
let mut iter = Iter::new(self.backend.data().as_ref());
|
||||
while let Some(result) = iter.next() {
|
||||
let _ = result?;
|
||||
}
|
||||
Ok(iter.offset)
|
||||
}
|
||||
|
||||
unsafe fn append_at(&mut self, mut offset: usize,
|
||||
key: &[u8], value: &[u8]) -> Result<usize, WriteError<B::Error>> {
|
||||
let record_size = 4 + key.len() + 1 + value.len();
|
||||
|
@ -122,16 +133,8 @@ impl<B: StoreBackend> Store<B> {
|
|||
}
|
||||
|
||||
fn append(&mut self, key: &str, value: &[u8]) -> Result<(), Error<B::Error>> {
|
||||
let free_offset = {
|
||||
let mut iter = Iter::new(self.backend.data().as_ref());
|
||||
while let Some(result) = iter.next() {
|
||||
let _ = result?;
|
||||
}
|
||||
iter.offset
|
||||
};
|
||||
|
||||
let free_offset = self.get_bytes_used()?;
|
||||
unsafe { self.append_at(free_offset, key.as_bytes(), value)? };
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue