use crate::Seekable;
#[derive(Debug)]
-pub struct SeekableVec<K: Ord + Copy, V: Ord + Copy> {
+pub struct SeekableVec<K: Ord + Clone, V: Ord + Clone> {
off: usize,
v: Vec<(K, V)>,
}
-impl<K: Ord + Copy, V: Ord + Copy> IntoIterator for SeekableVec<K, V> {
+impl<K: Ord + Clone, V: Ord + Clone> IntoIterator for SeekableVec<K, V> {
type Item = (K, V);
type IntoIter = Iter<Self>;
fn into_iter(self) -> Iter<Self> {
Iter(self)
}
}
-impl<K: Ord + Copy, V: Ord + Copy> Seekable for SeekableVec<K, V> {
+impl<K: Ord + Clone, V: Ord + Clone> Seekable for SeekableVec<K, V> {
type Key = K;
type Value = V;
fn next(&mut self) -> Option<(K, V)> {
if self.off >= self.v.len() {
return None;
}
- let v = self.v[self.off];
+ let v = self.v[self.off].clone();
self.off += 1;
Some(v)
}
}
}
}
-impl<K: Ord + Copy, V: Ord + Copy> From<Vec<(K, V)>> for SeekableVec<K, V> {
+impl<K: Ord + Clone, V: Ord + Clone> From<Vec<(K, V)>> for SeekableVec<K, V> {
fn from(vec: Vec<(K, V)>) -> SeekableVec<K, V> {
let mut sv = SeekableVec { off: 0, v: vec };
sv.v.sort();
}
}
-impl<K: Ord + Copy> From<Vec<K>> for SeekableVec<K, ()> {
+impl<K: Ord + Clone> From<Vec<K>> for SeekableVec<K, ()> {
fn from(vec: Vec<K>) -> SeekableVec<K, ()> {
let mut pv = vec.into_iter().map(|k| (k, ())).collect::<Vec<(K, ())>>();
pv.sort();