needforspeed: more stringlib refactoring

This commit is contained in:
Fredrik Lundh 2006-05-27 10:05:10 +00:00
parent d532ba0746
commit 2d23d5bf2e
4 changed files with 161 additions and 147 deletions

View file

@ -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)

View file

@ -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
/*