diff Objects/stringobject.c @ 34621:1edea4c2b011 legacy-trunk

* Beef-up tests for str.count(). * Speed-up str.count() by using memchr() to fly between first char matches.
author Raymond Hettinger <python@rcn.com>
date Sun, 20 Feb 2005 09:54:53 +0000
parents 556f6f1056a8
children 27a718221e72
line wrap: on
line diff
--- a/Objects/stringobject.c	Sun Feb 20 04:07:08 2005 +0000
+++ b/Objects/stringobject.c	Sun Feb 20 09:54:53 2005 +0000
@@ -2145,7 +2145,7 @@
 static PyObject *
 string_count(PyStringObject *self, PyObject *args)
 {
-	const char *s = PyString_AS_STRING(self), *sub;
+	const char *s = PyString_AS_STRING(self), *sub, *t;
 	int len = PyString_GET_SIZE(self), n;
 	int i = 0, last = INT_MAX;
 	int m, r;
@@ -2186,11 +2186,16 @@
 		} else {
 			i++;
 		}
+		if (i >= m)
+			break;
+		t = memchr(s+i, sub[0], m-i);
+		if (t == NULL)
+			break;
+		i = t - s;
 	}
 	return PyInt_FromLong((long) r);
 }
 
-
 PyDoc_STRVAR(swapcase__doc__,
 "S.swapcase() -> string\n\
 \n\