33
44/* collections module implementation of a deque() datatype
55 Written and maintained by Raymond D. Hettinger <[email protected] > 6- Copyright (c) 2004 Python Software Foundation.
6+ Copyright (c) 2004-2013 Python Software Foundation.
77 All rights reserved.
88*/
99
1010/* The block length may be set to any number over 1. Larger numbers
1111 * reduce the number of calls to the memory allocator but take more
12- * memory. Ideally, BLOCKLEN should be set with an eye to the
12+ * memory. Ideally, BLOCKLEN should be set to a multiple of the
1313 * length of a cache line.
1414 */
1515
@@ -413,7 +413,7 @@ deque_inplace_concat(dequeobject *deque, PyObject *other)
413413static int
414414_deque_rotate (dequeobject * deque , Py_ssize_t n )
415415{
416- Py_ssize_t i , m , len = deque -> len , halflen = ( len + 1 ) >>1 ;
416+ Py_ssize_t i , m , len = deque -> len , halflen = len >>1 ;
417417 block * prevblock ;
418418
419419 if (len <= 1 )
@@ -426,7 +426,7 @@ _deque_rotate(dequeobject *deque, Py_ssize_t n)
426426 n += len ;
427427 }
428428 assert (deque -> len > 1 );
429- assert (( n < len / 2 ) || ( n > len / -2 ) );
429+ assert (- halflen <= n && n <= halflen );
430430
431431 deque -> state ++ ;
432432 for (i = 0 ; i < n ; ) {
@@ -446,9 +446,7 @@ _deque_rotate(dequeobject *deque, Py_ssize_t n)
446446 m = deque -> rightindex + 1 ;
447447 if (m > deque -> leftindex )
448448 m = deque -> leftindex ;
449- assert (m > 0 );
450- assert (deque -> leftblock != deque -> rightblock ||
451- deque -> leftindex < deque -> rightindex - m + 1 );
449+ assert (m > 0 && m <= deque -> len );
452450 memcpy (& deque -> leftblock -> data [deque -> leftindex - m ],
453451 & deque -> rightblock -> data [deque -> rightindex - m + 1 ],
454452 m * sizeof (PyObject * ));
@@ -483,9 +481,7 @@ _deque_rotate(dequeobject *deque, Py_ssize_t n)
483481 m = BLOCKLEN - deque -> leftindex ;
484482 if (m > BLOCKLEN - 1 - deque -> rightindex )
485483 m = BLOCKLEN - 1 - deque -> rightindex ;
486- assert (m > 0 );
487- assert (deque -> leftblock != deque -> rightblock ||
488- deque -> leftindex + m < deque -> rightindex + 1 );
484+ assert (m > 0 && m <= deque -> len );
489485 memcpy (& deque -> rightblock -> data [deque -> rightindex + 1 ],
490486 & deque -> leftblock -> data [deque -> leftindex ],
491487 m * sizeof (PyObject * ));
0 commit comments