Fossil SCM
Another minor performance enhancement on sbs diff.
Commit
3e3feb2dda2c95070e0d34dc7d5ec4304a914bf6
Parent
87f867018b25a13…
1 file changed
+4
-5
+4
-5
| --- src/diff.c | ||
| +++ src/diff.c | ||
| @@ -576,23 +576,22 @@ | ||
| 576 | 576 | if( nA>250 ) nA = 250; |
| 577 | 577 | if( nB>250 ) nB = 250; |
| 578 | 578 | avg = (nA+nB)/2; |
| 579 | 579 | if( avg==0 ) return 0; |
| 580 | 580 | memset(aFirst, 0, sizeof(aFirst)); |
| 581 | - memset(aNext, 0, nB); | |
| 582 | 581 | zA--; zB--; /* Make both zA[] and zB[] 1-indexed */ |
| 583 | 582 | for(i=nB; i>0; i--){ |
| 584 | 583 | c = (unsigned char)zB[i]; |
| 585 | 584 | aNext[i] = aFirst[c]; |
| 586 | 585 | aFirst[c] = i; |
| 587 | 586 | } |
| 588 | 587 | best = 0; |
| 589 | - for(i=1; i<=nA; i++){ | |
| 588 | + for(i=1; i<=nA-best; i++){ | |
| 590 | 589 | c = (unsigned char)zA[i]; |
| 591 | - for(j=aFirst[c]; j>0; j = aNext[j]){ | |
| 592 | - int limit = minInt(nA-i, nB-j)+1; | |
| 593 | - for(k=1; k<limit && zA[k+i]==zB[k+j]; k++){} | |
| 590 | + for(j=aFirst[c]; j>0 && j<nB-best; j = aNext[j]){ | |
| 591 | + int limit = minInt(nA-i, nB-j); | |
| 592 | + for(k=1; k<=limit && zA[k+i]==zB[k+j]; k++){} | |
| 594 | 593 | if( k>best ) best = k; |
| 595 | 594 | } |
| 596 | 595 | } |
| 597 | 596 | score = (best>avg) ? 0 : (avg - best)*100/avg; |
| 598 | 597 | |
| 599 | 598 |
| --- src/diff.c | |
| +++ src/diff.c | |
| @@ -576,23 +576,22 @@ | |
| 576 | if( nA>250 ) nA = 250; |
| 577 | if( nB>250 ) nB = 250; |
| 578 | avg = (nA+nB)/2; |
| 579 | if( avg==0 ) return 0; |
| 580 | memset(aFirst, 0, sizeof(aFirst)); |
| 581 | memset(aNext, 0, nB); |
| 582 | zA--; zB--; /* Make both zA[] and zB[] 1-indexed */ |
| 583 | for(i=nB; i>0; i--){ |
| 584 | c = (unsigned char)zB[i]; |
| 585 | aNext[i] = aFirst[c]; |
| 586 | aFirst[c] = i; |
| 587 | } |
| 588 | best = 0; |
| 589 | for(i=1; i<=nA; i++){ |
| 590 | c = (unsigned char)zA[i]; |
| 591 | for(j=aFirst[c]; j>0; j = aNext[j]){ |
| 592 | int limit = minInt(nA-i, nB-j)+1; |
| 593 | for(k=1; k<limit && zA[k+i]==zB[k+j]; k++){} |
| 594 | if( k>best ) best = k; |
| 595 | } |
| 596 | } |
| 597 | score = (best>avg) ? 0 : (avg - best)*100/avg; |
| 598 | |
| 599 |
| --- src/diff.c | |
| +++ src/diff.c | |
| @@ -576,23 +576,22 @@ | |
| 576 | if( nA>250 ) nA = 250; |
| 577 | if( nB>250 ) nB = 250; |
| 578 | avg = (nA+nB)/2; |
| 579 | if( avg==0 ) return 0; |
| 580 | memset(aFirst, 0, sizeof(aFirst)); |
| 581 | zA--; zB--; /* Make both zA[] and zB[] 1-indexed */ |
| 582 | for(i=nB; i>0; i--){ |
| 583 | c = (unsigned char)zB[i]; |
| 584 | aNext[i] = aFirst[c]; |
| 585 | aFirst[c] = i; |
| 586 | } |
| 587 | best = 0; |
| 588 | for(i=1; i<=nA-best; i++){ |
| 589 | c = (unsigned char)zA[i]; |
| 590 | for(j=aFirst[c]; j>0 && j<nB-best; j = aNext[j]){ |
| 591 | int limit = minInt(nA-i, nB-j); |
| 592 | for(k=1; k<=limit && zA[k+i]==zB[k+j]; k++){} |
| 593 | if( k>best ) best = k; |
| 594 | } |
| 595 | } |
| 596 | score = (best>avg) ? 0 : (avg - best)*100/avg; |
| 597 | |
| 598 |