Commit ec8e8c6f authored by Raymond Hettinger's avatar Raymond Hettinger

Simplify delitem() code by calling rotate() directly instead of using

arguments passed through tuples.
parent 2aa9fa17
...@@ -310,17 +310,14 @@ deque_extendleft(dequeobject *deque, PyObject *iterable) ...@@ -310,17 +310,14 @@ deque_extendleft(dequeobject *deque, PyObject *iterable)
PyDoc_STRVAR(extendleft_doc, PyDoc_STRVAR(extendleft_doc,
"Extend the left side of the deque with elements from the iterable"); "Extend the left side of the deque with elements from the iterable");
static PyObject * static int
deque_rotate(dequeobject *deque, PyObject *args) _deque_rotate(dequeobject *deque, int n)
{ {
int i, n=1, len=deque->len, halflen=(len+1)>>1; int i, len=deque->len, halflen=(len+1)>>1;
PyObject *item, *rv; PyObject *item, *rv;
if (!PyArg_ParseTuple(args, "|i:rotate", &n))
return NULL;
if (len == 0) if (len == 0)
Py_RETURN_NONE; return 0;
if (n > halflen || n < -halflen) { if (n > halflen || n < -halflen) {
n %= len; n %= len;
if (n > halflen) if (n > halflen)
...@@ -335,7 +332,7 @@ deque_rotate(dequeobject *deque, PyObject *args) ...@@ -335,7 +332,7 @@ deque_rotate(dequeobject *deque, PyObject *args)
rv = deque_appendleft(deque, item); rv = deque_appendleft(deque, item);
Py_DECREF(item); Py_DECREF(item);
if (rv == NULL) if (rv == NULL)
return NULL; return -1;
Py_DECREF(rv); Py_DECREF(rv);
} }
for (i=0 ; i>n ; i--) { for (i=0 ; i>n ; i--) {
...@@ -344,10 +341,22 @@ deque_rotate(dequeobject *deque, PyObject *args) ...@@ -344,10 +341,22 @@ deque_rotate(dequeobject *deque, PyObject *args)
rv = deque_append(deque, item); rv = deque_append(deque, item);
Py_DECREF(item); Py_DECREF(item);
if (rv == NULL) if (rv == NULL)
return NULL; return -1;
Py_DECREF(rv); Py_DECREF(rv);
} }
Py_RETURN_NONE; return 0;
}
static PyObject *
deque_rotate(dequeobject *deque, PyObject *args)
{
int n=1;
if (!PyArg_ParseTuple(args, "|i:rotate", &n))
return NULL;
if (_deque_rotate(deque, n) == 0)
Py_RETURN_NONE;
return NULL;
} }
PyDoc_STRVAR(rotate_doc, PyDoc_STRVAR(rotate_doc,
...@@ -424,38 +433,17 @@ deque_item(dequeobject *deque, int i) ...@@ -424,38 +433,17 @@ deque_item(dequeobject *deque, int i)
static int static int
deque_del_item(dequeobject *deque, int i) deque_del_item(dequeobject *deque, int i)
{ {
PyObject *item=NULL, *minus_i=NULL, *plus_i=NULL; PyObject *item;
int rv = -1;
assert (i >= 0 && i < deque->len); assert (i >= 0 && i < deque->len);
if (_deque_rotate(deque, -i) == -1)
minus_i = Py_BuildValue("(i)", -i); return -1;
if (minus_i == NULL)
goto fail;
plus_i = Py_BuildValue("(i)", i);
if (plus_i == NULL)
goto fail;
item = deque_rotate(deque, minus_i);
if (item == NULL)
goto fail;
Py_DECREF(item);
item = deque_popleft(deque, NULL); item = deque_popleft(deque, NULL);
assert (item != NULL); assert (item != NULL);
Py_DECREF(item); Py_DECREF(item);
item = deque_rotate(deque, plus_i); return _deque_rotate(deque, i);
if (item == NULL)
goto fail;
rv = 0;
fail:
Py_XDECREF(item);
Py_XDECREF(minus_i);
Py_XDECREF(plus_i);
return rv;
} }
static int static int
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment