#![cfg_attr(feature = "bench", feature(test))]
#[cfg(test)]
extern crate rand;
#[cfg(feature = "bench")]
extern crate test;
pub mod bup;
pub mod gear;
pub use gear::Gear;
pub use bup::Bup;
pub trait Engine {
type Digest;
fn roll_byte(&mut self, byte: u8);
fn roll(&mut self, buf: &[u8]) {
buf.iter().map(|&b| self.roll_byte(b)).count();
}
fn digest(&self) -> Self::Digest;
fn reset(&mut self);
fn find_chunk_edge_cond<F>(&mut self, buf: &[u8], cond : F) -> Option<(usize, Self::Digest)>
where F : Fn(&Self) -> bool {
for (i, &b) in buf.iter().enumerate() {
self.roll_byte(b);
if cond(self) {
let digest = self.digest();
self.reset();
return Some((i + 1, digest));
}
}
None
}
}
#[cfg(test)]
mod tests;