needforspeed: more stringlib refactoring
diff --git a/Objects/stringlib/README.txt b/Objects/stringlib/README.txt
index 051197c..82a8774 100644
--- a/Objects/stringlib/README.txt
+++ b/Objects/stringlib/README.txt
@@ -3,3 +3,32 @@
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 d5394b4..9db633d 100644
--- a/Objects/stringlib/find.h
+++ b/Objects/stringlib/find.h
@@ -48,6 +48,39 @@
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
/*