[Python-checkins]
python/dist/src/Modules collectionsmodule.c, 1.36, 1.37
rhettinger at users.sourceforge.net
rhettinger at users.sourceforge.net
Fri Mar 18 22:20:26 CET 2005
Update of /cvsroot/python/python/dist/src/Modules
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27128/Modules
Modified Files:
collectionsmodule.c
Log Message:
Add a remove() method to collections.deque objects.
Index: collectionsmodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/collectionsmodule.c,v
retrieving revision 1.36
retrieving revision 1.37
diff -u -d -r1.36 -r1.37
--- collectionsmodule.c 9 Nov 2004 07:27:34 -0000 1.36
+++ collectionsmodule.c 18 Mar 2005 21:20:23 -0000 1.37
@@ -368,6 +368,41 @@
return deque->len;
}
+static PyObject *
+deque_remove(dequeobject *deque, PyObject *value)
+{
+ int i, n=deque->len;
+
+ for (i=0 ; i<n ; i++) {
+ PyObject *item = deque->leftblock->data[deque->leftindex];
+ int cmp = PyObject_RichCompareBool(item, value, Py_EQ);
+ if (cmp > 0) {
+ PyObject *tgt;
+ if (deque->len != n) {
+ PyErr_SetString(PyExc_IndexError,
+ "deque mutated during remove().");
+ return NULL;
+ }
+ tgt = deque_popleft(deque, NULL);
+ assert (tgt != NULL);
+ Py_DECREF(tgt);
+ if (_deque_rotate(deque, i) == -1)
+ return NULL;
+ Py_RETURN_NONE;
+ }
+ else if (cmp < 0) {
+ _deque_rotate(deque, i);
+ return NULL;
+ }
+ _deque_rotate(deque, -1);
+ }
+ PyErr_SetString(PyExc_ValueError, "deque.remove(x): x not in deque");
+ return NULL;
+}
+
+PyDoc_STRVAR(remove_doc,
+"D.remove(value) -- remove first occurrence of value.");
+
static int
deque_clear(dequeobject *deque)
{
@@ -764,7 +799,7 @@
METH_NOARGS, copy_doc},
{"extend", (PyCFunction)deque_extend,
METH_O, extend_doc},
- {"extendleft", (PyCFunction)deque_extendleft,
+ {"extendleft", (PyCFunction)deque_extendleft,
METH_O, extendleft_doc},
{"pop", (PyCFunction)deque_pop,
METH_NOARGS, pop_doc},
@@ -772,6 +807,8 @@
METH_NOARGS, popleft_doc},
{"__reduce__", (PyCFunction)deque_reduce,
METH_NOARGS, reduce_doc},
+ {"remove", (PyCFunction)deque_remove,
+ METH_O, remove_doc},
{"__reversed__", (PyCFunction)deque_reviter,
METH_NOARGS, reversed_doc},
{"rotate", (PyCFunction)deque_rotate,
More information about the Python-checkins
mailing list