~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/compiled/dirstate_helpers.pyx

  • Committer: John Arbash Meinel
  • Date: 2007-05-04 16:35:23 UTC
  • mto: This revision was merged to the branch mainline in revision 2643.
  • Revision ID: john@arbash-meinel.com-20070504163523-69dypgt24ipo26p2
Add an integer-size comparison loop at the begining, and
update the test suite to make sure we are properly exercising it.

Show diffs side-by-side

added added

removed removed

Lines of Context:
145
145
    cdef char *cur2
146
146
    cdef char *end1
147
147
    cdef char *end2
 
148
    cdef int *cur_int1
 
149
    cdef int *cur_int2
 
150
    cdef int *end_int1
 
151
    cdef int *end_int2
148
152
 
149
 
    cur1 = path1
150
 
    cur2 = path2
 
153
    cur_int1 = <int*>path1
 
154
    cur_int2 = <int*>path2
 
155
    end_int1 = <int*>(path1 + size1 - (size1%4))
 
156
    end_int2 = <int*>(path2 + size2 - (size2%4))
151
157
    end1 = path1+size1
152
158
    end2 = path2+size2
153
159
 
 
160
    # Use 32-bit comparisons for the matching portion of the string.
 
161
    # Almost all CPU's are faster at loading and comparing 32-bit integers,
 
162
    # than they are at 8-bit integers.
 
163
    while cur_int1 < end_int1 and cur_int2 < end_int2:
 
164
        if cur_int1[0] != cur_int2[0]:
 
165
            break
 
166
        cur_int1 = cur_int1 + 1
 
167
        cur_int2 = cur_int2 + 1
 
168
 
 
169
    cur1 = <char*>cur_int1
 
170
    cur2 = <char*>cur_int2
 
171
 
154
172
    while cur1 < end1 and cur2 < end2:
155
173
        if cur1[0] == cur2[0]:
156
174
            # This character matches, just go to the next one
176
194
    if cur1 < end1:
177
195
        # Must have reached path2 first, so it comes first
178
196
        return 1
179
 
    if cur2 < end1:
 
197
    if cur2 < end2:
180
198
        # Must have reached path1 first, it comes first
181
199
        return -1
182
200
    # We reached the end of both strings
185
203
 
186
204
def cmp_dirblock_strings(path1, path2):
187
205
    """Compare to python strings in dirblock fashion."""
188
 
    return _cmp_dirblock_strings(PyString_AsString(path1),
 
206
    return _cmp_dirblock_strings_alt(PyString_AsString(path1),
189
207
                                 PyString_Size(path1),
190
208
                                 PyString_AsString(path2),
191
209
                                 PyString_Size(path2))