diff options
author | Fredrik Lundh <fredrik@pythonware.com> | 2006-05-27 15:20:22 (GMT) |
---|---|---|
committer | Fredrik Lundh <fredrik@pythonware.com> | 2006-05-27 15:20:22 (GMT) |
commit | 60d8b1883113b35fa72e94dbf58e2e439120a1ae (patch) | |
tree | cd7bdb657aea421fadd7e3a397c0306ad82e9a16 /Objects/stringlib/find.h | |
parent | c2d29c5a6dc701f6fc1dc9b5274053f17c660960 (diff) | |
download | cpython-60d8b1883113b35fa72e94dbf58e2e439120a1ae.zip cpython-60d8b1883113b35fa72e94dbf58e2e439120a1ae.tar.gz cpython-60d8b1883113b35fa72e94dbf58e2e439120a1ae.tar.bz2 |
needforspeed: stringlib refactoring: changed find_obj to find_slice,
to enable use from stringobject
Diffstat (limited to 'Objects/stringlib/find.h')
-rw-r--r-- | Objects/stringlib/find.h | 57 |
1 files changed, 39 insertions, 18 deletions
diff --git a/Objects/stringlib/find.h b/Objects/stringlib/find.h index 9f010c7..4cea2db 100644 --- a/Objects/stringlib/find.h +++ b/Objects/stringlib/find.h @@ -48,18 +48,49 @@ stringlib_rfind(const STRINGLIB_CHAR* str, Py_ssize_t str_len, return pos; } -#ifdef STRINGLIB_STR - Py_LOCAL_INLINE(Py_ssize_t) -stringlib_find_obj(PyObject* str, PyObject* sub, - Py_ssize_t start, Py_ssize_t end) +stringlib_find_slice(const STRINGLIB_CHAR* str, Py_ssize_t str_len, + const STRINGLIB_CHAR* sub, Py_ssize_t sub_len, + Py_ssize_t start, Py_ssize_t end) { + if (start < 0) + start += str_len; + if (start < 0) + start = 0; + if (end > str_len) + end = str_len; + if (end < 0) + end += str_len; + if (end < 0) + end = 0; + return stringlib_find( - STRINGLIB_STR(str) + start, end - start, - STRINGLIB_STR(sub), STRINGLIB_LEN(sub), start + str + start, end - start, + sub, sub_len, start ); } +Py_LOCAL_INLINE(Py_ssize_t) +stringlib_rfind_slice(const STRINGLIB_CHAR* str, Py_ssize_t str_len, + const STRINGLIB_CHAR* sub, Py_ssize_t sub_len, + Py_ssize_t start, Py_ssize_t end) +{ + if (start < 0) + start += str_len; + if (start < 0) + start = 0; + if (end > str_len) + end = str_len; + if (end < 0) + end += str_len; + if (end < 0) + end = 0; + + return stringlib_rfind(str + start, end - start, sub, sub_len, start); +} + +#ifdef STRINGLIB_STR + Py_LOCAL_INLINE(int) stringlib_contains_obj(PyObject* str, PyObject* sub) { @@ -69,19 +100,9 @@ stringlib_contains_obj(PyObject* str, PyObject* sub) ) != -1; } -Py_LOCAL_INLINE(Py_ssize_t) -stringlib_rfind_obj(PyObject* str, PyObject* sub, - Py_ssize_t start, Py_ssize_t end) -{ - return stringlib_rfind( - STRINGLIB_STR(str) + start, end - start, - STRINGLIB_STR(sub), STRINGLIB_LEN(sub), start - ); -} - -#endif +#endif /* STRINGLIB_STR */ -#endif +#endif /* STRINGLIB_FIND_H */ /* Local variables: |