@@ -315,12 +315,8 @@ mmap_gfind(mmap_object *self,
315315 if (!PyArg_ParseTuple (args , reverse ? "y*|nn:rfind" : "y*|nn:find" ,
316316 & view , & start , & end )) {
317317 return NULL ;
318- } else {
319- const char * p , * start_p , * end_p ;
320- int sign = reverse ? -1 : 1 ;
321- const char * needle = view .buf ;
322- Py_ssize_t len = view .len ;
323-
318+ }
319+ else {
324320 if (start < 0 )
325321 start += self -> size ;
326322 if (start < 0 )
@@ -335,21 +331,19 @@ mmap_gfind(mmap_object *self,
335331 else if (end > self -> size )
336332 end = self -> size ;
337333
338- start_p = self -> data + start ;
339- end_p = self -> data + end ;
340-
341- for (p = (reverse ? end_p - len : start_p );
342- (p >= start_p ) && (p + len <= end_p ); p += sign ) {
343- Py_ssize_t i ;
344- for (i = 0 ; i < len && needle [i ] == p [i ]; ++ i )
345- /* nothing */ ;
346- if (i == len ) {
347- PyBuffer_Release (& view );
348- return PyLong_FromSsize_t (p - self -> data );
349- }
334+ Py_ssize_t res ;
335+ if (reverse ) {
336+ res = _PyBytes_ReverseFind (
337+ self -> data + start , end - start ,
338+ view .buf , view .len , start );
339+ }
340+ else {
341+ res = _PyBytes_Find (
342+ self -> data + start , end - start ,
343+ view .buf , view .len , start );
350344 }
351345 PyBuffer_Release (& view );
352- return PyLong_FromLong ( -1 );
346+ return PyLong_FromSsize_t ( res );
353347 }
354348}
355349
0 commit comments