> mal wrote: > > > * change hash value calculation to work on the Py_UNICODE data > > instead of creating a default encoded cached object (what > > now is .utf8str) [effbot] > it this what you had in mind? > > static long > unicode_hash(PyUnicodeObject *self) > { > register int len; > register Py_UNICODE *p; > register long x; > > if (self->hash != -1) > return self->hash; > len = PyUnicode_GET_SIZE(self); > p = PyUnicode_AS_UNICODE(self); > x = *p << 7; > while (--len >= 0) > x = (1000003*x) ^ *p++; > x ^= a->ob_size; > if (x == -1) > x = -2; > self->hash = x; > return x; > } You mean this (fixed a->ob_size, restored comment): static long unicode_hash(PyUnicodeObject *self) { /* Since Unicode objects compare equal to their ASCII string counterparts, they should also use the ASCII strings as basis for their hash value. This is needed to assure that strings and Unicode objects behave in the same way as dictionary keys. */ register int len; register Py_UNICODE *p; register long x; if (self->hash != -1) return self->hash; len = PyUnicode_GET_SIZE(self); p = PyUnicode_AS_UNICODE(self); x = *p << 7; while (--len >= 0) x = (1000003*x) ^ *p++; x ^= PyUnicode_GET_SIZE(self); if (x == -1) x = -2; self->hash = x; return x; } --Guido van Rossum (home page: http://dinsdale.python.org/~guido/)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4