Mailing List Archive

python/dist/src/Objects dictobject.c,2.124,2.125
Update of /cvsroot/python/python/dist/src/Objects
In directory usw-pr-cvs1:/tmp/cvs-serv15040/Objects

Modified Files:
dictobject.c
Log Message:
Add Raymond Hettinger's d.pop(). See SF patch 539949.


Index: dictobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/dictobject.c,v
retrieving revision 2.124
retrieving revision 2.125
diff -C2 -d -r2.124 -r2.125
*** dictobject.c 12 Apr 2002 02:43:00 -0000 2.124
--- dictobject.c 12 Apr 2002 15:11:58 -0000 2.125
***************
*** 1496,1499 ****
--- 1496,1532 ----

static PyObject *
+ dict_pop(dictobject *mp, PyObject *key)
+ {
+ long hash;
+ dictentry *ep;
+ PyObject *old_value, *old_key;
+
+ if (mp->ma_used == 0) {
+ PyErr_SetString(PyExc_KeyError,
+ "pop(): dictionary is empty");
+ return NULL;
+ }
+ if (!PyString_CheckExact(key) ||
+ (hash = ((PyStringObject *) key)->ob_shash) == -1) {
+ hash = PyObject_Hash(key);
+ if (hash == -1)
+ return NULL;
+ }
+ ep = (mp->ma_lookup)(mp, key, hash);
+ if (ep->me_value == NULL) {
+ PyErr_SetObject(PyExc_KeyError, key);
+ return NULL;
+ }
+ old_key = ep->me_key;
+ Py_INCREF(dummy);
+ ep->me_key = dummy;
+ old_value = ep->me_value;
+ ep->me_value = NULL;
+ mp->ma_used--;
+ Py_DECREF(old_key);
+ return old_value;
+ }
+
+ static PyObject *
dict_popitem(dictobject *mp)
{
***************
*** 1637,1640 ****
--- 1670,1676 ----
"D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if not D.has_key(k)";

+ static char pop__doc__[] =
+ "D.pop(k) -> v, remove specified key and return the corresponding value";
+
static char popitem__doc__[] =
"D.popitem() -> (k, v), remove and return some (key, value) pair as a\n\
***************
*** 1675,1678 ****
--- 1711,1716 ----
{"setdefault", (PyCFunction)dict_setdefault, METH_VARARGS,
setdefault_doc__},
+ {"pop", (PyCFunction)dict_pop, METH_O,
+ pop__doc__},
{"popitem", (PyCFunction)dict_popitem, METH_NOARGS,
popitem__doc__},