diff --git a/src/lib.rs b/src/lib.rs index ce81174..87b7d82 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -63,6 +63,17 @@ impl Store { .transpose()) } + /// how many bytes are currently used + /// + /// equally, offset of free space + pub fn get_bytes_used(&self) -> Result { + 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> { let record_size = 4 + key.len() + 1 + value.len(); @@ -122,16 +133,8 @@ impl Store { } fn append(&mut self, key: &str, value: &[u8]) -> Result<(), 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(()) }