diff options
author | Fredrik Lundh <fredrik@pythonware.com> | 2006-05-27 10:05:10 +0000 |
---|---|---|
committer | Fredrik Lundh <fredrik@pythonware.com> | 2006-05-27 10:05:10 +0000 |
commit | 2d23d5bf2efcea655b22e0ee4dd7cf6554a94c85 (patch) | |
tree | b9de33ef5fc6a0b57338597a14a755babad4dfa2 /Objects/stringlib | |
parent | d532ba07469d60866df60ec4a2f8afe714347d66 (diff) | |
download | cpython-git-2d23d5bf2efcea655b22e0ee4dd7cf6554a94c85.tar.gz |
needforspeed: more stringlib refactoring
Diffstat (limited to 'Objects/stringlib')
-rw-r--r-- | Objects/stringlib/README.txt | 29 | ||||
-rw-r--r-- | Objects/stringlib/find.h | 33 |
2 files changed, 62 insertions, 0 deletions
diff --git a/Objects/stringlib/README.txt b/Objects/stringlib/README.txt index 051197c36f..82a877465a 100644 --- a/Objects/stringlib/README.txt +++ b/Objects/stringlib/README.txt @@ -3,3 +3,32 @@ possibly other modules, in a not too distant future). the stuff in here is included into relevant places; see the individual source files for details. + +-------------------------------------------------------------------- +the following defines used by the different modules: + +STRINGLIB_CHAR + + the type used to hold a character (char or Py_UNICODE) + +STRINGLIB_EMPTY + + a PyObject representing the empty string + +int STRINGLIB_CMP(STRINGLIB_CHAR*, STRINGLIB_CHAR*, Py_ssize_t) + + compares two strings. returns 0 if they match, and non-zero if not. + +Py_ssize_t STRINGLIB_LEN(PyObject*) + + returns the length of the given string object (which must be of the + right type) + +PyObject* STRINGLIB_NEW(STRINGLIB_CHAR*, Py_ssize_t) + + creates a new string object + +STRINGLIB_CHAR* STRINGLIB_STR(PyObject*) + + returns the pointer to the character data for the given string + object (which must be of the right type) diff --git a/Objects/stringlib/find.h b/Objects/stringlib/find.h index d5394b4a31..9db633dd3a 100644 --- a/Objects/stringlib/find.h +++ b/Objects/stringlib/find.h @@ -48,6 +48,39 @@ stringlib_rfind(const STRINGLIB_CHAR* str, Py_ssize_t str_len, return pos; } +#ifdef STRINGLIB_STR + +Py_LOCAL(Py_ssize_t) +stringlib_find_obj(PyObject* str, PyObject* sub, + Py_ssize_t start, Py_ssize_t end) +{ + return stringlib_find( + STRINGLIB_STR(str) + start, end - start, + STRINGLIB_STR(sub), STRINGLIB_LEN(sub), start + ); +} + +Py_LOCAL(int) +stringlib_contains_obj(PyObject* str, PyObject* sub) +{ + return stringlib_find( + STRINGLIB_STR(str), STRINGLIB_LEN(str), + STRINGLIB_STR(sub), STRINGLIB_LEN(sub), 0 + ) != -1; +} + +Py_LOCAL(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 /* |