From: Raymond Hettinger Date: Mon, 19 Jan 2015 00:06:18 +0000 (-0800) Subject: Clean-up, simplify, and slightly speed-up bounds logic in set_pop(). X-Git-Tag: v3.5.0a1~145 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9cd6a789c6bd96e89b21b796292138d77d94c5aa;p=thirdparty%2FPython%2Fcpython.git Clean-up, simplify, and slightly speed-up bounds logic in set_pop(). Elsewhere in the setobject.c code we do a bitwise-and with the mask instead of using a conditional to reset to zero on wrap-around. Using that same technique here use gives cleaner, faster, and more consistent code. --- diff --git a/Objects/setobject.c b/Objects/setobject.c index 9dc88c834ef5..91f341cb0165 100644 --- a/Objects/setobject.c +++ b/Objects/setobject.c @@ -658,7 +658,8 @@ set_contains_key(PySetObject *so, PyObject *key) static PyObject * set_pop(PySetObject *so) { - Py_ssize_t i = 0; + /* Make sure the search finger is in bounds */ + Py_ssize_t i = so->finger & so->mask; setentry *entry; PyObject *key; @@ -668,17 +669,9 @@ set_pop(PySetObject *so) return NULL; } - i = so->finger; - /* This may be a legit search finger, or it may be a once legit - * search finger that's out of bounds now (due to wrapping or - * resizing). We simply make sure it's in bounds now. - */ - if (i > so->mask) - i = 0; while ((entry = &so->table[i])->key == NULL || entry->key==dummy) { i++; - if (i > so->mask) - i = 0; + i &= so->mask; } key = entry->key; entry->key = dummy;