Mercurial > lbo > hg > leveldb-rs
view src/test_util.rs @ 173:96ffa861bba6
Initial Bitbucket Pipelines configuration
author | Lewin Bormann <lewin@lewin-bormann.info> |
---|---|
date | Sat, 12 Aug 2017 08:16:20 +0000 |
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]) } } }