[Python-checkins] python/dist/src/Modules collectionsmodule.c, 1.5, 1.6

rhettinger at users.sourceforge.net rhettinger at users.sourceforge.net
Sat Feb 7 23:05:28 EST 2004


Update of /cvsroot/python/python/dist/src/Modules
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15559/Modules
Modified Files:
	collectionsmodule.c 
Log Message:
Make deque.rotate() smarter. Beef-up related tests.
Index: collectionsmodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/collectionsmodule.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** collectionsmodule.c	7 Feb 2004 21:13:00 -0000	1.5
--- collectionsmodule.c	8 Feb 2004 04:05:26 -0000	1.6
***************
*** 248,259 ****
 deque_rotate(dequeobject *deque, PyObject *args)
 {
! 	int i, n;
 	PyObject *item, *rv;
 
! 	if (!PyArg_ParseTuple(args, "i:rotate", &n))
 		return NULL;
 
! 	if (n == 0 || deque->len == 0)
 		Py_RETURN_NONE;
 
 	for (i=0 ; i<n ; i++) {
--- 248,266 ----
 deque_rotate(dequeobject *deque, PyObject *args)
 {
! 	int i, n=1, len=deque->len, halflen=(len+1)>>1;
 	PyObject *item, *rv;
 
! 	if (!PyArg_ParseTuple(args, "|i:rotate", &n))
 		return NULL;
 
! 	if (len == 0)
 		Py_RETURN_NONE;
+ 	if (n > halflen || n < -halflen) {
+ 		n %= len;
+ 		if (n > halflen)
+ 			n -= len;
+ 		else if (n < -halflen)
+ 			n += len;
+ 	}
 
 	for (i=0 ; i<n ; i++) {
***************
*** 281,285 ****
 
 PyDoc_STRVAR(rotate_doc, 
! "Rotate the deque n steps to the right. If n is negative, rotates left.");
 
 static int
--- 288,292 ----
 
 PyDoc_STRVAR(rotate_doc, 
! "Rotate the deque n steps to the right (default n=1). If n is negative, rotates left.");
 
 static int


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /