needforspeed: remove remaining USE_FAST macros; if fastsearch was

broken, someone would have noticed by now ;-)
This commit is contained in:
Fredrik Lundh 2006-05-26 17:31:41 +00:00
parent c2032fb86a
commit 3a65d87e8c
1 changed files with 2 additions and 67 deletions

View File

@ -767,10 +767,6 @@ PyString_AsStringAndSize(register PyObject *obj,
/* -------------------------------------------------------------------- */ /* -------------------------------------------------------------------- */
/* stringlib components */ /* stringlib components */
#define USE_FAST
#ifdef USE_FAST
#define STRINGLIB_CHAR char #define STRINGLIB_CHAR char
#define STRINGLIB_NEW PyString_FromStringAndSize #define STRINGLIB_NEW PyString_FromStringAndSize
#define STRINGLIB_EMPTY nullstring #define STRINGLIB_EMPTY nullstring
@ -778,8 +774,6 @@ PyString_AsStringAndSize(register PyObject *obj,
#include "stringlib/fastsearch.h" #include "stringlib/fastsearch.h"
#include "stringlib/partition.h" #include "stringlib/partition.h"
#endif
/* -------------------------------------------------------------------- */ /* -------------------------------------------------------------------- */
/* Methods */ /* Methods */
@ -1054,13 +1048,7 @@ string_contains(PyObject *a, PyObject *el)
char *s = PyString_AS_STRING(a); char *s = PyString_AS_STRING(a);
const char *sub = PyString_AS_STRING(el); const char *sub = PyString_AS_STRING(el);
Py_ssize_t len_sub = PyString_GET_SIZE(el); Py_ssize_t len_sub = PyString_GET_SIZE(el);
#ifdef USE_FAST
Py_ssize_t pos; Py_ssize_t pos;
#else
char *last;
Py_ssize_t shortsub;
char firstchar, lastchar;
#endif
if (!PyString_CheckExact(el)) { if (!PyString_CheckExact(el)) {
#ifdef Py_USING_UNICODE #ifdef Py_USING_UNICODE
@ -1077,35 +1065,12 @@ string_contains(PyObject *a, PyObject *el)
if (len_sub == 0) if (len_sub == 0)
return 1; return 1;
#ifdef USE_FAST
pos = fastsearch( pos = fastsearch(
s, PyString_GET_SIZE(a), s, PyString_GET_SIZE(a),
sub, len_sub, FAST_SEARCH sub, len_sub, FAST_SEARCH
); );
return (pos != -1); 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.
shortsub is len_sub minus the last character which is checked
separately just before the memcmp(). That check helps prevent
false starts and saves the setup time for memcmp().
*/
firstchar = sub[0];
shortsub = len_sub - 1;
lastchar = sub[shortsub];
last = s + PyString_GET_SIZE(a) - len_sub + 1;
while (s < last) {
s = (char *)memchr(s, firstchar, last-s);
if (s == NULL)
return 0;
assert(s < last);
if (s[shortsub] == lastchar && memcmp(s, sub, shortsub) == 0)
return 1;
s++;
}
#endif
return 0;
} }
static PyObject * static PyObject *
@ -1854,7 +1819,6 @@ string_find_internal(PyStringObject *self, PyObject *args, int dir)
string_adjust_indices(&i, &last, len); string_adjust_indices(&i, &last, len);
#ifdef USE_FAST
if (n == 0) if (n == 0)
return (dir > 0) ? i : last; return (dir > 0) ? i : last;
if (dir > 0) { if (dir > 0) {
@ -1863,17 +1827,7 @@ string_find_internal(PyStringObject *self, PyObject *args, int dir)
if (pos < 0) if (pos < 0)
return pos; return pos;
return pos + i; return pos + i;
} } else {
#endif
if (dir > 0) {
if (n == 0 && i <= last)
return (long)i;
last -= n;
for (; i <= last; ++i)
if (s[i] == sub[0] && memcmp(&s[i], sub, n) == 0)
return (long)i;
}
else {
Py_ssize_t j; Py_ssize_t j;
if (n == 0 && i <= last) if (n == 0 && i <= last)
@ -2299,28 +2253,9 @@ string_count(PyStringObject *self, PyObject *args)
if (n == 0) if (n == 0)
return PyInt_FromSsize_t(m-i); return PyInt_FromSsize_t(m-i);
#ifdef USE_FAST
r = fastsearch(s + i, last - i, sub, n, FAST_COUNT); r = fastsearch(s + i, last - i, sub, n, FAST_COUNT);
if (r < 0) if (r < 0)
r = 0; /* no match */ r = 0; /* no match */
#else
r = 0;
while (i < m) {
const char *t;
if (!memcmp(s+i, sub, n)) {
r++;
i += n;
} else {
i++;
}
if (i >= m)
break;
t = (const char *)memchr(s+i, sub[0], m-i);
if (t == NULL)
break;
i = t - s;
}
#endif
return PyInt_FromSsize_t(r); return PyInt_FromSsize_t(r);
} }