Mercurial > lbo > hg > leveldb-rs
changeset 374:07043da88acf
block_builder: Replace pedestrian integer encoding with *IntWriter methods.
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Sun, 08 Oct 2017 15:52:35 +0200 |
parents | 24a2501732de |
children | dcb6adc4114f |
files | src/block_builder.rs |
diffstat | 1 files changed, 8 insertions(+), 17 deletions(-) [+] |
line wrap: on
line diff
--- a/src/block_builder.rs Sun Oct 08 15:36:45 2017 +0200 +++ b/src/block_builder.rs Sun Oct 08 15:52:35 2017 +0200 @@ -3,8 +3,7 @@ use block::BlockContents; use options::Options; -use integer_encoding::FixedInt; -use integer_encoding::VarInt; +use integer_encoding::{FixedIntWriter, VarIntWriter}; /// BlockBuilder contains functionality for building a block consisting of consecutive key-value /// entries. @@ -75,15 +74,9 @@ let non_shared = key.len() - shared; - let mut buf = [0 as u8; 4]; - - let mut sz = shared.encode_var(&mut buf[..]); - self.buffer.extend_from_slice(&buf[0..sz]); - sz = non_shared.encode_var(&mut buf[..]); - self.buffer.extend_from_slice(&buf[0..sz]); - sz = val.len().encode_var(&mut buf[..]); - self.buffer.extend_from_slice(&buf[0..sz]); - + self.buffer.write_varint(shared).expect("write to buffer failed"); + self.buffer.write_varint(non_shared).expect("write to buffer failed"); + self.buffer.write_varint(val.len()).expect("write to buffer failed"); self.buffer.extend_from_slice(&key[shared..]); self.buffer.extend_from_slice(val); @@ -95,17 +88,15 @@ } pub fn finish(mut self) -> BlockContents { - // 1. Append RESTARTS - let mut i = self.buffer.len(); - self.buffer.resize(i + self.restarts.len() * 4 + 4, 0); + self.buffer.reserve(self.restarts.len() * 4 + 4); + // 1. Append RESTARTS for r in self.restarts.iter() { - r.encode_fixed(&mut self.buffer[i..i + 4]); - i += 4; + self.buffer.write_fixedint(*r as u32).expect("write to buffer failed"); } // 2. Append N_RESTARTS - (self.restarts.len() as u32).encode_fixed(&mut self.buffer[i..i + 4]); + self.buffer.write_fixedint(self.restarts.len() as u32).expect("write to buffer failed"); // done self.buffer