use rayon::prelude::*;
#[derive(Debug, PartialEq, Eq, Clone, Hash)]
pub struct Segment {
pub addr: u64,
pub bytes: Vec<u8>,
}
impl Segment {
pub fn new(addr: u64, bytes: Vec<u8>) -> Segment {
Segment { addr, bytes }
}
pub fn contains(&self, addr: u64) -> bool {
(self.addr <= addr) && (addr < (self.addr + self.bytes.len() as u64))
}
pub fn get_matching_offsets(&self, vals: &[u8]) -> Vec<usize> {
self.bytes
.par_iter()
.enumerate()
.filter(|&(_, b)| vals.contains(b))
.map(|(i, _)| i)
.collect()
}
}