Bring related functions add/contains/discard together in the code.

This commit is contained in:
Raymond Hettinger 2015-07-05 16:27:44 -07:00
parent 73799b181e
commit b48d6a63ff
1 changed files with 34 additions and 40 deletions

View File

@ -366,17 +366,14 @@ set_table_resize(PySetObject *so, Py_ssize_t minused)
} }
static int static int
set_add_key(PySetObject *so, PyObject *key) set_contains_entry(PySetObject *so, PyObject *key, Py_hash_t hash)
{ {
Py_hash_t hash; setentry *entry;
if (!PyUnicode_CheckExact(key) || entry = set_lookkey(so, key, hash);
(hash = ((PyASCIIObject *) key)->hash) == -1) { if (entry != NULL)
hash = PyObject_Hash(key); return entry->key != NULL;
if (hash == -1) return -1;
return -1;
}
return set_add_entry(so, key, hash);
} }
#define DISCARD_NOTFOUND 0 #define DISCARD_NOTFOUND 0
@ -402,11 +399,37 @@ set_discard_entry(PySetObject *so, PyObject *key, Py_hash_t hash)
} }
static int static int
set_discard_key(PySetObject *so, PyObject *key) set_add_key(PySetObject *so, PyObject *key)
{ {
Py_hash_t hash; Py_hash_t hash;
assert (PyAnySet_Check(so)); if (!PyUnicode_CheckExact(key) ||
(hash = ((PyASCIIObject *) key)->hash) == -1) {
hash = PyObject_Hash(key);
if (hash == -1)
return -1;
}
return set_add_entry(so, key, hash);
}
static int
set_contains_key(PySetObject *so, PyObject *key)
{
Py_hash_t hash;
if (!PyUnicode_CheckExact(key) ||
(hash = ((PyASCIIObject *) key)->hash) == -1) {
hash = PyObject_Hash(key);
if (hash == -1)
return -1;
}
return set_contains_entry(so, key, hash);
}
static int
set_discard_key(PySetObject *so, PyObject *key)
{
Py_hash_t hash;
if (!PyUnicode_CheckExact(key) || if (!PyUnicode_CheckExact(key) ||
(hash = ((PyASCIIObject *) key)->hash) == -1) { (hash = ((PyASCIIObject *) key)->hash) == -1) {
@ -653,35 +676,6 @@ set_merge(PySetObject *so, PyObject *otherset)
return 0; return 0;
} }
static int
set_contains_entry(PySetObject *so, PyObject *key, Py_hash_t hash)
{
setentry *lu_entry;
lu_entry = set_lookkey(so, key, hash);
if (lu_entry != NULL)
return lu_entry->key != NULL;
return -1;
}
static int
set_contains_key(PySetObject *so, PyObject *key)
{
setentry *entry;
Py_hash_t hash;
if (!PyUnicode_CheckExact(key) ||
(hash = ((PyASCIIObject *) key)->hash) == -1) {
hash = PyObject_Hash(key);
if (hash == -1)
return -1;
}
entry = set_lookkey(so, key, hash);
if (entry == NULL)
return -1;
return entry->key != NULL;
}
static PyObject * static PyObject *
set_pop(PySetObject *so) set_pop(PySetObject *so)
{ {