diff: Optimize single line edits
If the header and trailer are identical up to a single line on both sides, return that REPLACE edit as the only result. No algorithm can break down a REPLACE with height of 1. Change-Id: I483c40e8790cc3e8b322ef6dfce2299491fd0ac7
This commit is contained in:
parent
6de12836d7
commit
cbc7c5c03f
|
@ -114,6 +114,9 @@ public <S extends Sequence> EditList diff(
|
||||||
return EditList.singleton(region);
|
return EditList.singleton(region);
|
||||||
|
|
||||||
case REPLACE: {
|
case REPLACE: {
|
||||||
|
if (region.getLengthA() == 1 && region.getLengthB() == 1)
|
||||||
|
return EditList.singleton(region);
|
||||||
|
|
||||||
SubsequenceComparator<S> cs = new SubsequenceComparator<S>(cmp);
|
SubsequenceComparator<S> cs = new SubsequenceComparator<S>(cmp);
|
||||||
Subsequence<S> as = Subsequence.a(a, region);
|
Subsequence<S> as = Subsequence.a(a, region);
|
||||||
Subsequence<S> bs = Subsequence.b(b, region);
|
Subsequence<S> bs = Subsequence.b(b, region);
|
||||||
|
|
|
@ -192,7 +192,10 @@ private void diff(Edit r) {
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case REPLACE:
|
case REPLACE:
|
||||||
diffReplace(r);
|
if (r.getLengthA() == 1 && r.getLengthB() == 1)
|
||||||
|
edits.add(r);
|
||||||
|
else
|
||||||
|
diffReplace(r);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EMPTY:
|
case EMPTY:
|
||||||
|
|
Loading…
Reference in New Issue