.push(self.next.take().or_else(|| self.iter.next())?);
// println!("2: {:?} / {:?}", self.next, self.run);
- while let Some(e) = self.iter.next() {
+ for e in &mut self.iter {
if e == self.run[0] {
self.run.push(e);
continue;
let ts = TestSource(
(1u8..10)
- .map(|i| (i..1).map(move |j| Entry::new(vec![i], vec![j])))
- .flatten()
+ .flat_map(|i| (i..1).map(move |j| Entry::new(vec![i], vec![j])))
.collect(),
);
let s = ts.dupsort_func(|a, b| a.value()[0].cmp(&b.value()[0]));
assert_eq!(
- Vec::from_iter((&s).iter()),
+ Vec::from_iter(s.iter()),
(1u8..10)
- .map(|i| (i..1).map(move |j| Entry::new(vec![i], vec![j])))
- .flatten()
+ .flat_map(|i| (i..1).map(move |j| Entry::new(vec![i], vec![j])))
.collect::<Vec<_>>()
);
}
dir.pop();
read_to_string(f)
- .and_then(|s| {
- Ok(s.lines()
+ .map(|s| {
+ s.lines()
.map(|l| dir.clone().join(PathBuf::from(l)))
- .collect::<Vec<_>>())
+ .collect::<Vec<_>>()
})
.map_err(|e| e.into())
}
clean.iter().for_each(|f| {
readers.remove(f);
- ()
});
self.last_reload = now;
if (self.filter)(&item, &mut self.seek_key) {
return Some(item);
}
- if self.seek_key.len() > 0 {
+ if !self.seek_key.is_empty() {
self.iter.seek(self.seek_key.as_slice());
}
}
use crate::source::test_source::TestSource;
use crate::Entry;
- let ts = TestSource(
- (0u8..10)
- .into_iter()
- .map(|n| Entry::new(vec![n], vec![]))
- .collect(),
- )
- .filter(|e, sv| {
- // pass only even values
- if e.key()[0] % 2 != 0 {
- return false;
- } else if e.key()[0] == 4 {
- // at key 4, seek to 8
- sv.push(8);
- return false;
- }
- true
- });
+ let ts =
+ TestSource((0u8..10).map(|n| Entry::new(vec![n], vec![])).collect()).filter(|e, sv| {
+ // pass only even values
+ if e.key()[0] % 2 != 0 {
+ return false;
+ } else if e.key()[0] == 4 {
+ // at key 4, seek to 8
+ sv.push(8);
+ return false;
+ }
+ true
+ });
assert_eq!(
vec![0, 2, 8],
type Item = Entry;
fn next(&mut self) -> Option<Self::Item> {
let mut cur = self.prev.take().or_else(|| self.iter.next())?;
- while let Some(e) = self.iter.next() {
+ for e in &mut self.iter {
if e.key() == cur.key() {
(self.merge_func)(cur.value_mut(), &e);
} else {
let ts = TestSource(
(1u8..8)
- .map(|n| vec![n; n as usize])
- .flatten()
+ .flat_map(|n| vec![n; n as usize])
.map(|n| Entry::new(vec![n], vec![1]))
.collect(),
);
impl<I: SeekableIter> PartialOrd for MergeEntry<I> {
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
- Some(other.e.key().cmp(&self.e.key()))
+ Some(other.e.key().cmp(self.e.key()))
}
}
impl<I: SeekableIter> Ord for MergeEntry<I> {
fn cmp(&self, other: &Self) -> Ordering {
- other.e.key().cmp(&self.e.key())
+ other.e.key().cmp(self.e.key())
}
}
use crate::Source;
fn tnum(m: u8) -> Vec<u8> {
- Vec::from_iter((1u8..255).into_iter().filter(|i| i % m == 0))
+ Vec::from_iter((1u8..255).filter(|i| i % m == 0))
}
fn test_source(m: u8) -> TestSource {
#[test]
fn test_merge() {
let range = 1..8;
- let iters: Vec<_> = range.clone().into_iter().map(test_source).collect();
+ let iters: Vec<_> = range.clone().map(test_source).collect();
let s = Merger::from(iters);
let mut v = Vec::<u8>::new();
for i in range {
let v: Vec<u8> = vec![1, 8, 2, 9, 4, 7, 3];
let vs = v.as_slice();
- let h = BinaryHeap::from_iter(vs.into_iter().map(|p| *p));
+ let h = BinaryHeap::from_iter(vs.iter().copied());
assert_ne!(h.into_vec(), v);
}
}
type Item = Entry;
fn next(&mut self) -> Option<Self::Item> {
- self.decode().map(|e| e.clone())
+ self.decode().cloned()
}
}
Vec::from_iter(
(0..n)
.map(|i| i * skip)
- .map(|i| Entry::new(&u32::to_be_bytes(i), &u32::to_be_bytes(i * 1024))),
+ .map(|i| Entry::new(u32::to_be_bytes(i), u32::to_be_bytes(i * 1024))),
)
}
self.batch_size += esize;
}
- pub fn source<'a>(&'a mut self) -> impl Source<'a, Item = Entry> {
- if self.batch.get_mut().len() > 0 {
+ pub fn source(&mut self) -> impl Source<'_, Item = Entry> {
+ if !self.batch.get_mut().is_empty() {
self.write_chunk();
}
Merger::from(self.readers.clone()).merge_func(&self.merge_func)
}
pub fn write<W: std::io::Write>(mut self, mut w: Writer<W>) {
- if self.batch.get_mut().len() > 0 {
+ if !self.batch.get_mut().is_empty() {
self.write_chunk();
}
let m = Merger::from(self.readers).merge_func(self.merge_func);
vec: &'a Vec<Entry>,
}
-impl<'a> Iterator for VecIter<'a> {
+impl Iterator for VecIter<'_> {
type Item = Entry;
fn next(&mut self) -> Option<Self::Item> {
if self.index > self.vec.len() {
}
}
-impl<'a> SeekableIter for VecIter<'a> {
+impl SeekableIter for VecIter<'_> {
fn seek(&mut self, key: &[u8]) {
let mut left = 0;
let mut right = self.vec.len() - 1;
off: usize,
}
- impl<'a> Iterator for TestIter<'a> {
+ impl Iterator for TestIter<'_> {
type Item = Entry;
fn next(&mut self) -> Option<Self::Item> {
}
}
- impl<'a> SeekableIter for TestIter<'a> {
+ impl SeekableIter for TestIter<'_> {
fn seek(&mut self, key: &[u8]) {
self.off = 0;
while self.off < self.source.0.len() && self.source.0[self.off].key() < key {
let b = self.index.as_slice();
let start = self.written;
self.written += self.out.write_varint(b.len())?;
- self.written += self.out.write_fixedint(crc32c(&b))?;
+ self.written += self.out.write_fixedint(crc32c(b))?;
self.out.write_all(b)?;
self.written += b.len();
self.meta.add_index_block(start, self.written - start);