#[cfg(test)]
mod test {
- use crate::seekable::{Iter, Seekable};
+ use crate::seekable::vec::SeekableVec;
+ use crate::Seekable;
use std::cmp::Ordering;
- #[derive(Debug)]
- struct SeekableVec<T: Ord + Copy> {
- off: usize,
- v: Vec<T>,
- }
- impl<T: Ord + Copy> IntoIterator for SeekableVec<T> {
- type Item = (T, ());
- type IntoIter = Iter<Self>;
- fn into_iter(self) -> Iter<Self> {
- Iter(self)
- }
- }
- impl<T: Ord + Copy> Seekable for SeekableVec<T> {
- type Key = T;
- type Value = ();
- fn next(&mut self) -> Option<(T, ())> {
- if self.off >= self.v.len() {
- return None;
- }
- let v = self.v[self.off];
- self.off += 1;
- Some((v, ()))
- }
- fn seek(&mut self, key: &T) {
- self.off = 0;
- while self.off < self.v.len() {
- if self.v[self.off] >= *key {
- break;
- }
- self.off += 1;
- }
- }
- }
- impl<T: Ord + Copy> From<Vec<T>> for SeekableVec<T> {
- fn from(vec: Vec<T>) -> SeekableVec<T> {
- let mut sv = SeekableVec { off: 0, v: vec };
- sv.v.sort();
- sv
- }
- }
-
#[test]
fn test_seekablevec() {
let mut v = vec![3, 1, 4, 1, 5, 9];
--- /dev/null
+use crate::seekable::Iter;
+use crate::Seekable;
+
+#[derive(Debug)]
+pub struct SeekableVec<T: Ord + Copy> {
+ off: usize,
+ v: Vec<T>,
+}
+impl<T: Ord + Copy> IntoIterator for SeekableVec<T> {
+ type Item = (T, ());
+ type IntoIter = Iter<Self>;
+ fn into_iter(self) -> Iter<Self> {
+ Iter(self)
+ }
+}
+impl<T: Ord + Copy> Seekable for SeekableVec<T> {
+ type Key = T;
+ type Value = ();
+ fn next(&mut self) -> Option<(T, ())> {
+ if self.off >= self.v.len() {
+ return None;
+ }
+ let v = self.v[self.off];
+ self.off += 1;
+ Some((v, ()))
+ }
+ fn seek(&mut self, key: &T) {
+ self.off = 0;
+ while self.off < self.v.len() {
+ if self.v[self.off] >= *key {
+ break;
+ }
+ self.off += 1;
+ }
+ }
+}
+impl<T: Ord + Copy> From<Vec<T>> for SeekableVec<T> {
+ fn from(vec: Vec<T>) -> SeekableVec<T> {
+ let mut sv = SeekableVec { off: 0, v: vec };
+ sv.v.sort();
+ sv
+ }
+}