"Tim Peters" <tim.one@home.com> writes: > Ah! Of course. string_compare is hardwired into lookdict_string. > This case may be important enough to merit a distinct > _PyString_Equal function, with just the stuff lookdict_string needs Or just inlining it all into lookdict_string, something like: Index: Objects/dictobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/dictobject.c,v retrieving revision 2.90 diff -c -r2.90 dictobject.c *** Objects/dictobject.c 2001/05/19 07:04:38 2.90 --- Objects/dictobject.c 2001/05/20 11:51:28 *************** *** 279,286 **** register unsigned int mask = mp->ma_size-1; dictentry *ep0 = mp->ma_table; register dictentry *ep; - cmpfunc compare = PyString_Type.tp_compare; /* make sure this function doesn't have to handle non-string keys */ if (!PyString_Check(key)) { #ifdef SHOW_CONVERSION_COUNTS --- 279,287 ---- register unsigned int mask = mp->ma_size-1; dictentry *ep0 = mp->ma_table; register dictentry *ep; + #define S(s) ((PyStringObject*)(s)) + /* make sure this function doesn't have to handle non-string keys */ if (!PyString_Check(key)) { #ifdef SHOW_CONVERSION_COUNTS *************** *** 299,305 **** freeslot = ep; else { if (ep->me_hash == hash ! && compare(ep->me_key, key) == 0) { return ep; } freeslot = NULL; --- 300,308 ---- freeslot = ep; else { if (ep->me_hash == hash ! && S(ep->me_key)->ob_size == S(key)->ob_size ! && memcmp(S(ep->me_key)->ob_sval, ! S(key)->ob_sval,S(key)->ob_size) == 0) { return ep; } freeslot = NULL; *************** *** 318,324 **** if (ep->me_key == key || (ep->me_hash == hash && ep->me_key != dummy ! && compare(ep->me_key, key) == 0)) return ep; else if (ep->me_key == dummy && freeslot == NULL) freeslot = ep; --- 321,329 ---- if (ep->me_key == key || (ep->me_hash == hash && ep->me_key != dummy ! && S(ep->me_key)->ob_size == S(key)->ob_size ! && memcmp(S(ep->me_key)->ob_sval, ! S(key)->ob_sval,S(key)->ob_size) == 0)) return ep; else if (ep->me_key == dummy && freeslot == NULL) freeslot = ep; *************** *** 327,332 **** --- 332,339 ---- if (incr > mask) incr ^= mp->ma_poly; /* clears the highest bit */ } + + #undef S } /* (apologies for the use of the preprocessor...). I'll leave it to someone else to work out if this is a win or not... -- >> REVIEW OF THE YEAR, 2000 << It was shit. Give us another one. -- NTK Know, 2000-12-29, http://www.ntk.net/
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