Restore quick exit (no freeslot check) for common case (found null on first probe).

This commit is contained in:
Raymond Hettinger 2015-06-20 21:39:51 -07:00
parent 81fdd0b868
commit 6ee588f14e

View file

@ -142,7 +142,10 @@ set_insert_key(PySetObject *so, PyObject *key, Py_hash_t hash)
entry = &table[i];
if (entry->key == NULL)
goto found_null;
goto found_null_first;
freeslot = NULL;
perturb = hash;
while (1) {
if (entry->hash == hash) {
@ -207,6 +210,13 @@ set_insert_key(PySetObject *so, PyObject *key, Py_hash_t hash)
goto found_null;
}
found_null_first:
so->fill++;
so->used++;
entry->key = key;
entry->hash = hash;
return 0;
found_null:
if (freeslot == NULL) {
/* UNUSED */