Refactor patience unique code to be more readable

This commit is contained in:
Armin Ronacher 2021-02-21 19:38:40 +01:00
parent c32556cfee
commit b468bf94e3
2 changed files with 56 additions and 24 deletions

View file

@ -14,7 +14,7 @@ use std::time::Instant;
use crate::algorithms::{myers, DiffHook, NoFinishHook, Replace};
use super::utils::{unique, Indexable};
use super::utils::{unique, UniqueItem};
/// Patience diff algorithm.
///
@ -101,11 +101,11 @@ struct Patience<'old, 'new, 'd, Old: ?Sized, New: ?Sized, D> {
old: &'old Old,
old_current: usize,
old_end: usize,
old_indexes: &'old [Indexable<'old, Old>],
old_indexes: &'old [UniqueItem<'old, Old>],
new: &'new New,
new_current: usize,
new_end: usize,
new_indexes: &'new [Indexable<'new, New>],
new_indexes: &'new [UniqueItem<'new, New>],
deadline: Option<Instant>,
}
@ -121,8 +121,8 @@ where
for (old, new) in (old..old + len).zip(new..new + len) {
let a0 = self.old_current;
let b0 = self.new_current;
while self.old_current < self.old_indexes[old].index()
&& self.new_current < self.new_indexes[new].index()
while self.old_current < self.old_indexes[old].original_index()
&& self.new_current < self.new_indexes[new].original_index()
&& self.new[self.new_current] == self.old[self.old_current]
{
self.old_current += 1;
@ -135,13 +135,13 @@ where
myers::diff_deadline(
&mut no_finish_d,
self.old,
self.old_current..self.old_indexes[old].index(),
self.old_current..self.old_indexes[old].original_index(),
self.new,
self.new_current..self.new_indexes[new].index(),
self.new_current..self.new_indexes[new].original_index(),
self.deadline,
)?;
self.old_current = self.old_indexes[old].index();
self.new_current = self.new_indexes[new].index();
self.old_current = self.old_indexes[old].original_index();
self.new_current = self.new_indexes[new].original_index();
}
Ok(())
}