Fossil SCM
Performance optimization in the break_into_lines() routine of the diff logic.
Commit
8d48885f811a6604ecabb93ac90ee07b96eda9ad
Parent
95768950b417f08…
1 file changed
+10
-11
+10
-11
| --- src/diff.c | ||
| +++ src/diff.c | ||
| @@ -145,20 +145,19 @@ | ||
| 145 | 145 | |
| 146 | 146 | /* Count the number of lines. Allocate space to hold |
| 147 | 147 | ** the returned array. |
| 148 | 148 | */ |
| 149 | 149 | for(i=j=0, nLine=1; i<n; i++, j++){ |
| 150 | - int c = z[i]; | |
| 151 | - if( c==0 ){ | |
| 152 | - return 0; | |
| 153 | - } | |
| 154 | - if( c=='\n' && z[i+1]!=0 ){ | |
| 155 | - nLine++; | |
| 156 | - if( j>LENGTH_MASK ){ | |
| 157 | - return 0; | |
| 158 | - } | |
| 159 | - j = 0; | |
| 150 | + if( z[i]<='\n' ){ | |
| 151 | + if( z[i]==0 ) return 0; | |
| 152 | + if( z[i]=='\n' && z[i+1]!=0 ){ | |
| 153 | + nLine++; | |
| 154 | + if( j>LENGTH_MASK ){ | |
| 155 | + return 0; | |
| 156 | + } | |
| 157 | + j = 0; | |
| 158 | + } | |
| 160 | 159 | } |
| 161 | 160 | } |
| 162 | 161 | if( j>LENGTH_MASK ){ |
| 163 | 162 | return 0; |
| 164 | 163 | } |
| @@ -169,11 +168,11 @@ | ||
| 169 | 168 | return a; |
| 170 | 169 | } |
| 171 | 170 | |
| 172 | 171 | /* Fill in the array */ |
| 173 | 172 | for(i=0; i<nLine; i++){ |
| 174 | - for(j=0; z[j] && z[j]!='\n'; j++){} | |
| 173 | + for(j=0; z[j]>'\n' || (z[j]!=0 && z[j]!='\n'); j++){} | |
| 175 | 174 | a[i].z = z; |
| 176 | 175 | k = j; |
| 177 | 176 | if( diffFlags & DIFF_STRIP_EOLCR ){ |
| 178 | 177 | if( k>0 && z[k-1]=='\r' ){ k--; } |
| 179 | 178 | } |
| 180 | 179 |
| --- src/diff.c | |
| +++ src/diff.c | |
| @@ -145,20 +145,19 @@ | |
| 145 | |
| 146 | /* Count the number of lines. Allocate space to hold |
| 147 | ** the returned array. |
| 148 | */ |
| 149 | for(i=j=0, nLine=1; i<n; i++, j++){ |
| 150 | int c = z[i]; |
| 151 | if( c==0 ){ |
| 152 | return 0; |
| 153 | } |
| 154 | if( c=='\n' && z[i+1]!=0 ){ |
| 155 | nLine++; |
| 156 | if( j>LENGTH_MASK ){ |
| 157 | return 0; |
| 158 | } |
| 159 | j = 0; |
| 160 | } |
| 161 | } |
| 162 | if( j>LENGTH_MASK ){ |
| 163 | return 0; |
| 164 | } |
| @@ -169,11 +168,11 @@ | |
| 169 | return a; |
| 170 | } |
| 171 | |
| 172 | /* Fill in the array */ |
| 173 | for(i=0; i<nLine; i++){ |
| 174 | for(j=0; z[j] && z[j]!='\n'; j++){} |
| 175 | a[i].z = z; |
| 176 | k = j; |
| 177 | if( diffFlags & DIFF_STRIP_EOLCR ){ |
| 178 | if( k>0 && z[k-1]=='\r' ){ k--; } |
| 179 | } |
| 180 |
| --- src/diff.c | |
| +++ src/diff.c | |
| @@ -145,20 +145,19 @@ | |
| 145 | |
| 146 | /* Count the number of lines. Allocate space to hold |
| 147 | ** the returned array. |
| 148 | */ |
| 149 | for(i=j=0, nLine=1; i<n; i++, j++){ |
| 150 | if( z[i]<='\n' ){ |
| 151 | if( z[i]==0 ) return 0; |
| 152 | if( z[i]=='\n' && z[i+1]!=0 ){ |
| 153 | nLine++; |
| 154 | if( j>LENGTH_MASK ){ |
| 155 | return 0; |
| 156 | } |
| 157 | j = 0; |
| 158 | } |
| 159 | } |
| 160 | } |
| 161 | if( j>LENGTH_MASK ){ |
| 162 | return 0; |
| 163 | } |
| @@ -169,11 +168,11 @@ | |
| 168 | return a; |
| 169 | } |
| 170 | |
| 171 | /* Fill in the array */ |
| 172 | for(i=0; i<nLine; i++){ |
| 173 | for(j=0; z[j]>'\n' || (z[j]!=0 && z[j]!='\n'); j++){} |
| 174 | a[i].z = z; |
| 175 | k = j; |
| 176 | if( diffFlags & DIFF_STRIP_EOLCR ){ |
| 177 | if( k>0 && z[k-1]=='\r' ){ k--; } |
| 178 | } |
| 179 |