From c70a2b7bb90cac8fd65aaeaf62e36c0945b93243 Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 21 Sep 2013 14:02:55 -0700 Subject: [PATCH] Make the linear probe sequence clearer. --- Objects/setobject.c | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/Objects/setobject.c b/Objects/setobject.c index ece76bfc25e..05b672fbec5 100644 --- a/Objects/setobject.c +++ b/Objects/setobject.c @@ -62,7 +62,6 @@ set_lookkey(PySetObject *so, PyObject *key, Py_hash_t hash) size_t i = (size_t)hash; /* Unsigned for defined overflow behavior. */ int cmp; #if LINEAR_PROBES - setentry *limit; size_t j; #endif @@ -89,9 +88,8 @@ set_lookkey(PySetObject *so, PyObject *key, Py_hash_t hash) freeslot = entry; #if LINEAR_PROBES - limit = &table[mask]; - for (j = 0 ; j < LINEAR_PROBES ; j++) { - entry = (entry == limit) ? &table[0] : entry + 1; + for (j = 1 ; j <= LINEAR_PROBES ; j++) { + entry = &table[(i + j) & mask]; if (entry->key == NULL) goto found_null; if (entry->key == key) @@ -139,7 +137,6 @@ set_lookkey_unicode(PySetObject *so, PyObject *key, Py_hash_t hash) size_t mask = so->mask; size_t i = (size_t)hash; #if LINEAR_PROBES - setentry *limit; size_t j; #endif @@ -166,9 +163,8 @@ set_lookkey_unicode(PySetObject *so, PyObject *key, Py_hash_t hash) freeslot = entry; #if LINEAR_PROBES - limit = &table[mask]; - for (j = 0 ; j < LINEAR_PROBES ; j++) { - entry = (entry == limit) ? &table[0] : entry + 1; + for (j = 1 ; j <= LINEAR_PROBES ; j++) { + entry = &table[(i + j) & mask]; if (entry->key == NULL) goto found_null; if (entry->key == key