Mercurial > lbo > hg > leveldb-rs
view src/test_util.rs @ 157:de83256f4423
Refactor Env and PosixDiskEnv to be more dynamic.
This comes closer to the original LevelDB implementation, is more flexible, and
most importantly enables inclusion as member of Options.
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Sun, 09 Jul 2017 20:33:20 +0200 |
parents | 7c13a7d4f795 |
children | 50642ad716ea |
line wrap: on
line source
use types::LdbIterator; use cmp::{Cmp, DefaultCmp}; use std::cmp::Ordering; pub struct TestLdbIter<'a> { v: Vec<(&'a [u8], &'a [u8])>, ix: usize, init: bool, } impl<'a> TestLdbIter<'a> { pub fn new(c: Vec<(&'a [u8], &'a [u8])>) -> TestLdbIter<'a> { return TestLdbIter { v: c, ix: 0, init: false, }; } } impl<'a> Iterator for TestLdbIter<'a> { type Item = (&'a [u8], &'a [u8]); fn next(&mut self) -> Option<Self::Item> { if self.ix == self.v.len() { return None; } else if !self.init { self.init = true; Some(self.v[self.ix]) } else { self.ix += 1; Some(self.v[self.ix - 1]) } } } impl<'a> LdbIterator for TestLdbIter<'a> { fn reset(&mut self) { self.ix = 0; self.init = false; } fn current(&self) -> Option<Self::Item> { if self.init && self.ix < self.v.len() { Some(self.v[self.ix]) } else { None } } fn valid(&self) -> bool { self.init } fn seek(&mut self, k: &[u8]) { self.ix = 0; while self.ix < self.v.len() && DefaultCmp.cmp(self.v[self.ix].0, k) == Ordering::Less { self.ix += 1; } } fn prev(&mut self) -> Option<Self::Item> { if !self.init || self.ix == 0 { None } else { self.ix -= 1; Some(self.v[self.ix]) } } }