]> granicus.if.org Git - python/commitdiff
needforspeed: check first *and* last character before doing a full memcmp
authorFredrik Lundh <fredrik@pythonware.com>
Tue, 23 May 2006 10:10:57 +0000 (10:10 +0000)
committerFredrik Lundh <fredrik@pythonware.com>
Tue, 23 May 2006 10:10:57 +0000 (10:10 +0000)
Include/unicodeobject.h

index c0036bf837eb8937c44ea408607374c7175fb8e6..82a023275902afb56e71582b59789f66bc305708 100644 (file)
@@ -367,10 +367,12 @@ typedef PY_UNICODE_TYPE Py_UNICODE;
         for (i_ = 0; i_ < (length); i_++) t_[i_] = v_;\
     } while (0)
 
-#define Py_UNICODE_MATCH(string, offset, substring)\
-    ((*((string)->str + (offset)) == *((substring)->str)) &&\
-     !memcmp((string)->str + (offset), (substring)->str,\
-             (substring)->length*sizeof(Py_UNICODE)))
+/* check if substring matches at given offset.  the offset must be
+   valid, and the substring must not be empty */
+#define Py_UNICODE_MATCH(string, offset, substring) \
+    ((*((string)->str + (offset)) == *((substring)->str)) && \
+    ((*((string)->str + (offset) + (substring)->length-1) == *((substring)->str + (substring)->length-1))) && \
+     !memcmp((string)->str + (offset), (substring)->str, (substring)->length*sizeof(Py_UNICODE)))
 
 #ifdef __cplusplus
 extern "C" {