- fn build_hash(&mut self) {
- for el in self.hstart.iter_mut() { *el = NONEXT; }
- for el in self.hend.iter_mut() { *el = NONEXT; }
- for el in self.hnext.iter_mut() { *el = NONEXT; }
- if self.pos + 3 >= self.src.len() {
- return;
- }
- let end = (self.src.len() - 3).min(self.pos + NONEXT);
- for i in (self.pos .. end).rev() {
- let key = Self::hash(&self.src[i..]);
- if self.hstart[key] == NONEXT {
- self.hstart[key] = i;
- self.hend[key] = i;
- self.hnext[key] = NONEXT;
- } else {
- self.hnext[self.hend[key]] = i;
- self.hend[key] = i;
- }
- }
+ fn add_hash(&mut self, hash: usize) {
+ self.hnext[self.pos & WINDOW_MASK] = self.hstart[hash];
+ self.hstart[hash] = self.pos;
+ self.hnext[(self.pos + 1) & WINDOW_MASK] = self.src.len();