summaryrefslogtreecommitdiffstats
path: root/Objects/stringobject.c
diff options
context:
space:
mode:
authorFredrik Lundh <fredrik@pythonware.com>2006-05-25 15:22:03 (GMT)
committerFredrik Lundh <fredrik@pythonware.com>2006-05-25 15:22:03 (GMT)
commit39ccef607eefbd4955c7fb069f6c921c0fe3516f (patch)
treefec97859d27a6cb2616c59c90018b4e3c5ba68f3 /Objects/stringobject.c
parentc620bada3a0675cce140ddeb970db5cf7bf79398 (diff)
downloadcpython-39ccef607eefbd4955c7fb069f6c921c0fe3516f.zip
cpython-39ccef607eefbd4955c7fb069f6c921c0fe3516f.tar.gz
cpython-39ccef607eefbd4955c7fb069f6c921c0fe3516f.tar.bz2
needforspeed: speed up upper and lower for 8-bit string objects.
(the unicode versions of these are still 2x faster on windows, though...) based on work by Andrew Dalke, with tweaks by yours truly.
Diffstat (limited to 'Objects/stringobject.c')
-rw-r--r--Objects/stringobject.c42
1 files changed, 20 insertions, 22 deletions
diff --git a/Objects/stringobject.c b/Objects/stringobject.c
index f3104ee..d3ab54e 100644
--- a/Objects/stringobject.c
+++ b/Objects/stringobject.c
@@ -2036,26 +2036,25 @@ Return a copy of the string S converted to lowercase.");
static PyObject *
string_lower(PyStringObject *self)
{
- char *s = PyString_AS_STRING(self), *s_new;
+ char *s;
Py_ssize_t i, n = PyString_GET_SIZE(self);
PyObject *newobj;
- newobj = PyString_FromStringAndSize(NULL, n);
- if (newobj == NULL)
+ newobj = PyString_FromStringAndSize(PyString_AS_STRING(self), n);
+ if (!newobj)
return NULL;
- s_new = PyString_AsString(newobj);
+
+ s = PyString_AS_STRING(newobj);
+
for (i = 0; i < n; i++) {
- int c = Py_CHARMASK(*s++);
- if (isupper(c)) {
- *s_new = tolower(c);
- } else
- *s_new = c;
- s_new++;
+ char c = Py_CHARMASK(s[i]);
+ if (isupper(c))
+ s[i] = _tolower(c);
}
+
return newobj;
}
-
PyDoc_STRVAR(upper__doc__,
"S.upper() -> string\n\
\n\
@@ -2064,26 +2063,25 @@ Return a copy of the string S converted to uppercase.");
static PyObject *
string_upper(PyStringObject *self)
{
- char *s = PyString_AS_STRING(self), *s_new;
+ char *s;
Py_ssize_t i, n = PyString_GET_SIZE(self);
PyObject *newobj;
- newobj = PyString_FromStringAndSize(NULL, n);
- if (newobj == NULL)
+ newobj = PyString_FromStringAndSize(PyString_AS_STRING(self), n);
+ if (!newobj)
return NULL;
- s_new = PyString_AsString(newobj);
+
+ s = PyString_AS_STRING(newobj);
+
for (i = 0; i < n; i++) {
- int c = Py_CHARMASK(*s++);
- if (islower(c)) {
- *s_new = toupper(c);
- } else
- *s_new = c;
- s_new++;
+ char c = Py_CHARMASK(s[i]);
+ if (islower(c))
+ s[i] = _toupper(c);
}
+
return newobj;
}
-
PyDoc_STRVAR(title__doc__,
"S.title() -> string\n\
\n\