Fossil SCM

Performance optimization in the break_into_lines() routine of the diff logic.

drh 2016-09-28 18:19 trunk
Commit 8d48885f811a6604ecabb93ac90ee07b96eda9ad
1 file changed +10 -11
+10 -11
--- src/diff.c
+++ src/diff.c
@@ -145,20 +145,19 @@
145145
146146
/* Count the number of lines. Allocate space to hold
147147
** the returned array.
148148
*/
149149
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
+ }
160159
}
161160
}
162161
if( j>LENGTH_MASK ){
163162
return 0;
164163
}
@@ -169,11 +168,11 @@
169168
return a;
170169
}
171170
172171
/* Fill in the array */
173172
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++){}
175174
a[i].z = z;
176175
k = j;
177176
if( diffFlags & DIFF_STRIP_EOLCR ){
178177
if( k>0 && z[k-1]=='\r' ){ k--; }
179178
}
180179
--- 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

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button