]> granicus.if.org Git - python/commitdiff
A faster version of the find_prefix_at_end() function (that I found in the
authorAndrew M. Kuchling <amk@amk.ca>
Wed, 20 Mar 2002 02:22:58 +0000 (02:22 +0000)
committerAndrew M. Kuchling <amk@amk.ca>
Wed, 20 Mar 2002 02:22:58 +0000 (02:22 +0000)
    last Medusa release)

Should be safe as a bugfix candidate, though it's not fixing a bug.

Lib/asynchat.py

index 3b2b37d978c8a70a82f70df5218e5db500196996..762070f6b9a2a75cf36a84ad5bc20bd455a81dc9 100644 (file)
@@ -280,20 +280,18 @@ class fifo:
 # characters matched.
 # for example:
 # f_p_a_e ("qwerty\r", "\r\n") => 1
-# f_p_a_e ("qwerty\r\n", "\r\n") => 2
 # f_p_a_e ("qwertydkjf", "\r\n") => 0
+# f_p_a_e ("qwerty\r\n", "\r\n") => <undefined>
 
 # this could maybe be made faster with a computed regex?
 # [answer: no; circa Python-2.0, Jan 2001]
-# python:    18307/s
+# new python:   28961/s
+# old python:   18307/s
 # re:        12820/s
 # regex:     14035/s
 
 def find_prefix_at_end (haystack, needle):
-    nl = len(needle)
-    result = 0
-    for i in range (1,nl):
-        if haystack[-(nl-i):] == needle[:(nl-i)]:
-            result = nl-i
-            break
-    return result
+       l = len(needle) - 1
+       while l and not haystack.endswith(needle[:l]):
+               l -= 1
+       return l