mirror of
https://github.com/python/cpython.git
synced 2024-11-28 16:45:42 +01:00
b1b915c796
Remove an unused early-out test from the critical path for dict and set lookups. When the strings already have matching lengths, kinds, and hashes, there is no additional information gained by checking the first characters (the probability of a mismatch is already known to be less than 1 in 2**64).
26 lines
862 B
C
26 lines
862 B
C
/* 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 (PyUnicode_READY(a) == -1 || PyUnicode_READY(b) == -1) {
|
|
assert(0 && "unicode_eq ready fail");
|
|
return 0;
|
|
}
|
|
|
|
if (PyUnicode_GET_LENGTH(a) != PyUnicode_GET_LENGTH(b))
|
|
return 0;
|
|
if (PyUnicode_GET_LENGTH(a) == 0)
|
|
return 1;
|
|
if (PyUnicode_KIND(a) != PyUnicode_KIND(b))
|
|
return 0;
|
|
return memcmp(PyUnicode_1BYTE_DATA(a), PyUnicode_1BYTE_DATA(b),
|
|
PyUnicode_GET_LENGTH(a) * PyUnicode_KIND(a)) == 0;
|
|
}
|