Skip to content

Commit

Permalink
Simplify set entry insertion logic. (GH-19881)
Browse files Browse the repository at this point in the history
  • Loading branch information
rhettinger committed May 3, 2020
1 parent 21893fb commit 3dd2157
Showing 1 changed file with 2 additions and 16 deletions.
18 changes: 2 additions & 16 deletions Objects/setobject.c
Expand Up @@ -137,7 +137,6 @@ static int
set_add_entry(PySetObject *so, PyObject *key, Py_hash_t hash)
{
setentry *table;
setentry *freeslot;
setentry *entry;
size_t perturb;
size_t mask;
Expand All @@ -158,7 +157,6 @@ set_add_entry(PySetObject *so, PyObject *key, Py_hash_t hash)
if (entry->key == NULL)
goto found_unused;

freeslot = NULL;
perturb = hash;

while (1) {
Expand Down Expand Up @@ -187,14 +185,12 @@ set_add_entry(PySetObject *so, PyObject *key, Py_hash_t hash)
goto restart;
mask = so->mask; /* help avoid a register spill */
}
else if (entry->hash == -1)
freeslot = entry;

if (i + LINEAR_PROBES <= mask) {
for (j = 0 ; j < LINEAR_PROBES ; j++) {
entry++;
if (entry->hash == 0 && entry->key == NULL)
goto found_unused_or_dummy;
goto found_unused;
if (entry->hash == hash) {
PyObject *startkey = entry->key;
assert(startkey != dummy);
Expand All @@ -216,8 +212,6 @@ set_add_entry(PySetObject *so, PyObject *key, Py_hash_t hash)
goto restart;
mask = so->mask;
}
else if (entry->hash == -1)
freeslot = entry;
}
}

Expand All @@ -226,17 +220,9 @@ set_add_entry(PySetObject *so, PyObject *key, Py_hash_t hash)

entry = &so->table[i];
if (entry->key == NULL)
goto found_unused_or_dummy;
goto found_unused;
}

found_unused_or_dummy:
if (freeslot == NULL)
goto found_unused;
so->used++;
freeslot->key = key;
freeslot->hash = hash;
return 0;

found_unused:
so->fill++;
so->used++;
Expand Down

0 comments on commit 3dd2157

Please sign in to comment.