diff options
author | Christian Heimes <christian@cheimes.de> | 2007-12-10 15:50:56 (GMT) |
---|---|---|
committer | Christian Heimes <christian@cheimes.de> | 2007-12-10 15:50:56 (GMT) |
commit | 0ded5b54bb499865fb4ab8c0ac3d0977df9a334d (patch) | |
tree | a395f726d50a71b1bf363d5a041224ad51e80691 /Objects/stringlib | |
parent | 110194048e2d6a42f5954c39c8646ba93b66a7e1 (diff) | |
download | cpython-0ded5b54bb499865fb4ab8c0ac3d0977df9a334d.zip cpython-0ded5b54bb499865fb4ab8c0ac3d0977df9a334d.tar.gz cpython-0ded5b54bb499865fb4ab8c0ac3d0977df9a334d.tar.bz2 |
Fixed issue #1564: The set implementation should special-case PyUnicode instead of PyString
I moved the unicode_eq to stringlib/eq.h to keep the function static and possible inline for setobject.c and dictobject.h. I also removed the unused _PyString_Eq method. If it's required in the future it can be added to eq.h
Diffstat (limited to 'Objects/stringlib')
-rw-r--r-- | Objects/stringlib/eq.h | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/Objects/stringlib/eq.h b/Objects/stringlib/eq.h new file mode 100644 index 0000000..4e989dc --- /dev/null +++ b/Objects/stringlib/eq.h @@ -0,0 +1,21 @@ +/* Fast unicode equal function optimized for dictobject.c and setobject.c */ + +/* Return 1 if two unicode objects are equal, 0 if not. + * unicode_eq() is called when the hash of two unicode objects is equal. + */ +Py_LOCAL_INLINE(int) +unicode_eq(PyObject *aa, PyObject *bb) +{ + register PyUnicodeObject *a = (PyUnicodeObject *)aa; + register PyUnicodeObject *b = (PyUnicodeObject *)bb; + + if (a->length != b->length) + return 0; + if (a->length == 0) + return 1; + if (a->str[0] != b->str[0]) + return 0; + if (a->length == 1) + return 1; + return memcmp(a->str, b->str, a->length * sizeof(Py_UNICODE)) == 0; +} |