Mercurial > lbo > hg > leveldb-rs
view src/test_util.rs @ 81:3e4f2805ab57
Clean up library, make it build again; make FBR own its block
author | Lewin Bormann <lbo@spheniscida.de> |
---|---|
date | Sat, 20 Aug 2016 09:11:36 +0200 |
parents | 94ea2222178f |
children | 89810ac42bd1 |
line wrap: on
line source
use types::LdbIterator; use types::Comparator; use types::StandardComparator; 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() && StandardComparator::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]) } } }