Reorder fields in patience diff
This commit is contained in:
parent
5ba816486e
commit
e1c6cb8a42
1 changed files with 30 additions and 24 deletions
|
|
@ -66,15 +66,15 @@ where
|
|||
}
|
||||
|
||||
struct Patience<'old, 'new, 'd, Old: ?Sized, New: ?Sized, D> {
|
||||
current_old: usize,
|
||||
current_new: usize,
|
||||
end_old: usize,
|
||||
end_new: usize,
|
||||
d: &'d mut D,
|
||||
old: &'old Old,
|
||||
new: &'new New,
|
||||
d: &'d mut D,
|
||||
unique_old: &'old [Indexable<'old, Old>],
|
||||
unique_new: &'new [Indexable<'new, New>],
|
||||
current_old: usize,
|
||||
end_old: usize,
|
||||
current_new: usize,
|
||||
end_new: usize,
|
||||
indexes_old: &'old [Indexable<'old, Old>],
|
||||
indexes_new: &'new [Indexable<'new, New>],
|
||||
}
|
||||
|
||||
impl<'old, 'new, 'd, Old, New, D> DiffHook for Patience<'old, 'new, 'd, Old, New, D>
|
||||
|
|
@ -89,8 +89,8 @@ where
|
|||
for (old, new) in (old..old + len).zip(new..new + len) {
|
||||
let a0 = self.current_old;
|
||||
let b0 = self.current_new;
|
||||
while self.current_old < self.unique_old[old].index
|
||||
&& self.current_new < self.unique_new[new].index
|
||||
while self.current_old < self.indexes_old[old].index
|
||||
&& self.current_new < self.indexes_new[new].index
|
||||
&& self.new[self.current_new] == self.old[self.current_old]
|
||||
{
|
||||
self.current_old += 1;
|
||||
|
|
@ -103,13 +103,13 @@ where
|
|||
self.d,
|
||||
self.old,
|
||||
self.current_old,
|
||||
self.unique_old[old].index,
|
||||
self.indexes_old[old].index,
|
||||
self.new,
|
||||
self.current_new,
|
||||
self.unique_new[new].index,
|
||||
self.indexes_new[new].index,
|
||||
)?;
|
||||
self.current_old = self.unique_old[old].index;
|
||||
self.current_new = self.unique_new[new].index;
|
||||
self.current_old = self.indexes_old[old].index;
|
||||
self.current_new = self.indexes_new[new].index;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
|
@ -142,21 +142,27 @@ where
|
|||
New::Output: PartialEq<Old::Output> + Hash + Eq,
|
||||
D: DiffHook,
|
||||
{
|
||||
let au = unique(old, old_range.start, old_range.end);
|
||||
let bu = unique(new, old_range.start, old_range.end);
|
||||
let indexes_old = unique(old, old_range.start, old_range.end);
|
||||
let indexes_new = unique(new, old_range.start, old_range.end);
|
||||
|
||||
let mut d = Replace::new(Patience {
|
||||
current_old: old_range.start,
|
||||
current_new: new_range.start,
|
||||
old,
|
||||
end_old: old_range.end,
|
||||
new,
|
||||
end_new: new_range.end,
|
||||
d,
|
||||
unique_old: &au,
|
||||
unique_new: &bu,
|
||||
old,
|
||||
new,
|
||||
current_old: old_range.start,
|
||||
end_old: old_range.end,
|
||||
current_new: new_range.start,
|
||||
end_new: new_range.end,
|
||||
indexes_old: &indexes_old,
|
||||
indexes_new: &indexes_new,
|
||||
});
|
||||
myers::diff(&mut d, &au, 0..au.len(), &bu, 0..bu.len())?;
|
||||
myers::diff(
|
||||
&mut d,
|
||||
&indexes_old,
|
||||
0..indexes_old.len(),
|
||||
&indexes_new,
|
||||
0..indexes_new.len(),
|
||||
)?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue