Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit dcb9d94

Browse files
committed
Simplify delitem() code by calling rotate() directly instead of using
arguments passed through tuples.
1 parent 7126976 commit dcb9d94

1 file changed

Lines changed: 23 additions & 35 deletions

File tree

Modules/collectionsmodule.c

Lines changed: 23 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -310,17 +310,14 @@ deque_extendleft(dequeobject *deque, PyObject *iterable)
310310
PyDoc_STRVAR(extendleft_doc,
311311
"Extend the left side of the deque with elements from the iterable");
312312

313-
static PyObject *
314-
deque_rotate(dequeobject *deque, PyObject *args)
313+
static int
314+
_deque_rotate(dequeobject *deque, int n)
315315
{
316-
int i, n=1, len=deque->len, halflen=(len+1)>>1;
316+
int i, len=deque->len, halflen=(len+1)>>1;
317317
PyObject *item, *rv;
318318

319-
if (!PyArg_ParseTuple(args, "|i:rotate", &n))
320-
return NULL;
321-
322319
if (len == 0)
323-
Py_RETURN_NONE;
320+
return 0;
324321
if (n > halflen || n < -halflen) {
325322
n %= len;
326323
if (n > halflen)
@@ -335,7 +332,7 @@ deque_rotate(dequeobject *deque, PyObject *args)
335332
rv = deque_appendleft(deque, item);
336333
Py_DECREF(item);
337334
if (rv == NULL)
338-
return NULL;
335+
return -1;
339336
Py_DECREF(rv);
340337
}
341338
for (i=0 ; i>n ; i--) {
@@ -344,10 +341,22 @@ deque_rotate(dequeobject *deque, PyObject *args)
344341
rv = deque_append(deque, item);
345342
Py_DECREF(item);
346343
if (rv == NULL)
347-
return NULL;
344+
return -1;
348345
Py_DECREF(rv);
349346
}
350-
Py_RETURN_NONE;
347+
return 0;
348+
}
349+
350+
static PyObject *
351+
deque_rotate(dequeobject *deque, PyObject *args)
352+
{
353+
int n=1;
354+
355+
if (!PyArg_ParseTuple(args, "|i:rotate", &n))
356+
return NULL;
357+
if (_deque_rotate(deque, n) == 0)
358+
Py_RETURN_NONE;
359+
return NULL;
351360
}
352361

353362
PyDoc_STRVAR(rotate_doc,
@@ -424,38 +433,17 @@ deque_item(dequeobject *deque, int i)
424433
static int
425434
deque_del_item(dequeobject *deque, int i)
426435
{
427-
PyObject *item=NULL, *minus_i=NULL, *plus_i=NULL;
428-
int rv = -1;
436+
PyObject *item;
429437

430438
assert (i >= 0 && i < deque->len);
431-
432-
minus_i = Py_BuildValue("(i)", -i);
433-
if (minus_i == NULL)
434-
goto fail;
435-
436-
plus_i = Py_BuildValue("(i)", i);
437-
if (plus_i == NULL)
438-
goto fail;
439-
440-
item = deque_rotate(deque, minus_i);
441-
if (item == NULL)
442-
goto fail;
443-
Py_DECREF(item);
439+
if (_deque_rotate(deque, -i) == -1)
440+
return -1;
444441

445442
item = deque_popleft(deque, NULL);
446443
assert (item != NULL);
447444
Py_DECREF(item);
448445

449-
item = deque_rotate(deque, plus_i);
450-
if (item == NULL)
451-
goto fail;
452-
453-
rv = 0;
454-
fail:
455-
Py_XDECREF(item);
456-
Py_XDECREF(minus_i);
457-
Py_XDECREF(plus_i);
458-
return rv;
446+
return _deque_rotate(deque, i);
459447
}
460448

461449
static int

0 commit comments

Comments
 (0)