]> granicus.if.org Git - python/commitdiff
Make the linear probe sequence clearer.
authorRaymond Hettinger <python@rcn.com>
Sat, 21 Sep 2013 21:02:55 +0000 (14:02 -0700)
committerRaymond Hettinger <python@rcn.com>
Sat, 21 Sep 2013 21:02:55 +0000 (14:02 -0700)
Objects/setobject.c

index ece76bfc25ede6e55f320f81a906efa41e474f8a..05b672fbec59cafeb8e2e21357836f0833af33ee 100644 (file)
@@ -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