Mercurial > lbo > hg > leveldb-rs
changeset 353:c8dade1cb8e1
memtable: Actually, do return deleted values from MemTableIterator
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Thu, 05 Oct 2017 20:02:00 +0200 |
parents | 742cfffd2892 |
children | 55b7a2eef262 |
files | src/memtable.rs |
diffstat | 1 files changed, 13 insertions(+), 32 deletions(-) [+] |
line wrap: on
line diff
--- a/src/memtable.rs Thu Oct 05 19:45:55 2017 +0200 +++ b/src/memtable.rs Thu Oct 05 20:02:00 2017 +0200 @@ -72,31 +72,17 @@ /// from the MemtableKey format used in the inner map; all key-taking or -returning methods deal /// with InternalKeys. /// -/// This iterator skips deleted entries. +/// This iterator does not skip deleted entries. pub struct MemtableIterator { skipmapiter: SkipMapIter, } impl LdbIterator for MemtableIterator { fn advance(&mut self) -> bool { - // Make sure this is actually needed. - let (mut key, mut val) = (vec![], vec![]); - loop { - if !self.skipmapiter.advance() { - return false; - } - if self.skipmapiter.current(&mut key, &mut val) { - let (_, _, tag, _, _) = parse_memtable_key(&key); - - if tag & 0xff == ValueType::TypeValue as u64 { - return true; - } else { - continue; - } - } else { - return false; - } + if !self.skipmapiter.advance() { + return false; } + self.skipmapiter.valid() } fn reset(&mut self) { self.skipmapiter.reset(); @@ -131,19 +117,14 @@ } if self.skipmapiter.current(key, val) { - let (keylen, keyoff, tag, vallen, valoff) = parse_memtable_key(&key); - - if tag & 0xff == ValueType::TypeValue as u64 { - val.clear(); - val.extend_from_slice(&key[valoff..valoff + vallen]); - // zero-allocation truncation. - shift_left(key, keyoff); - // Truncate key to key+tag. - key.truncate(keylen + u64::required_space()); - return true; - } else { - panic!("should not happen"); - } + let (keylen, keyoff, _, vallen, valoff) = parse_memtable_key(&key); + val.clear(); + val.extend_from_slice(&key[valoff..valoff + vallen]); + // zero-allocation truncation. + shift_left(key, keyoff); + // Truncate key to key+tag. + key.truncate(keylen + u64::required_space()); + return true; } else { panic!("should not happen"); } @@ -309,7 +290,7 @@ "122".as_bytes(), "124".as_bytes(), // deleted entry: - // "125".as_bytes(), + "125".as_bytes(), "126".as_bytes()]; let mut i = 0;