mirror of
https://github.com/python/cpython.git
synced 2025-11-01 18:51:43 +00:00
needforspeed: more stringlib refactoring
This commit is contained in:
parent
d532ba0746
commit
2d23d5bf2e
4 changed files with 161 additions and 147 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue