Mercurial > cpython-lru_cache-weakref
diff Objects/stringobject.c @ 38309:2aa9409351d6 legacy-trunk
needforspeed: use fastsearch also for find/index and contains. the
related tests are now about 10x faster.
| author | Fredrik Lundh <fredrik@pythonware.com> |
|---|---|
| date | Thu, 25 May 2006 18:44:29 +0000 |
| parents | c5d61965cad4 |
| children | c9dc300eee68 |
line wrap: on
line diff
--- a/Objects/stringobject.c Thu May 25 18:44:09 2006 +0000 +++ b/Objects/stringobject.c Thu May 25 18:44:29 2006 +0000 @@ -1149,10 +1149,14 @@ { char *s = PyString_AS_STRING(a); const char *sub = PyString_AS_STRING(el); + Py_ssize_t len_sub = PyString_GET_SIZE(el); +#ifdef USE_FAST + Py_ssize_t pos; +#else char *last; - Py_ssize_t len_sub = PyString_GET_SIZE(el); Py_ssize_t shortsub; char firstchar, lastchar; +#endif if (!PyString_CheckExact(el)) { #ifdef Py_USING_UNICODE @@ -1168,6 +1172,14 @@ if (len_sub == 0) return 1; + +#ifdef USE_FAST + pos = fastsearch( + s, PyString_GET_SIZE(a), + sub, len_sub, FAST_SEARCH + ); + return (pos != -1); +#else /* last points to one char beyond the start of the rightmost substring. When s<last, there is still room for a possible match and s[0] through s[len_sub-1] will be in bounds. @@ -1188,6 +1200,7 @@ return 1; s++; } +#endif return 0; } @@ -1895,6 +1908,17 @@ string_adjust_indices(&i, &last, len); +#ifdef USE_FAST + if (n == 0) + return (dir > 0) ? i : last; + if (dir > 0) { + Py_ssize_t pos = fastsearch(s + i, last - i, sub, n, + FAST_SEARCH); + if (pos < 0) + return pos; + return pos + i; + } +#endif if (dir > 0) { if (n == 0 && i <= last) return (long)i;
