summaryrefslogtreecommitdiff
path: root/Objects/stringlib
diff options
context:
space:
mode:
authorFredrik Lundh <fredrik@pythonware.com>2006-05-27 10:05:10 +0000
committerFredrik Lundh <fredrik@pythonware.com>2006-05-27 10:05:10 +0000
commit2d23d5bf2efcea655b22e0ee4dd7cf6554a94c85 (patch)
treeb9de33ef5fc6a0b57338597a14a755babad4dfa2 /Objects/stringlib
parentd532ba07469d60866df60ec4a2f8afe714347d66 (diff)
downloadcpython-git-2d23d5bf2efcea655b22e0ee4dd7cf6554a94c85.tar.gz
needforspeed: more stringlib refactoring
Diffstat (limited to 'Objects/stringlib')
-rw-r--r--Objects/stringlib/README.txt29
-rw-r--r--Objects/stringlib/find.h33
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
/*