[Python-checkins] r61172 - python/trunk/Modules/itertoolsmodule.c

raymond.hettinger python-checkins at python.org
Sun Mar 2 12:57:16 CET 2008


Author: raymond.hettinger
Date: Sun Mar  2 12:57:16 2008
New Revision: 61172

Modified:
   python/trunk/Modules/itertoolsmodule.c
Log:
Simplify code for itertools.product().

Modified: python/trunk/Modules/itertoolsmodule.c
==============================================================================
--- python/trunk/Modules/itertoolsmodule.c	(original)
+++ python/trunk/Modules/itertoolsmodule.c	Sun Mar  2 12:57:16 2008
@@ -1770,7 +1770,6 @@
 typedef struct {
 	PyObject_HEAD
 	PyObject *pools;		/* tuple of pool tuples */
-	Py_ssize_t *maxvec;             /* size of each pool */
 	Py_ssize_t *indices;            /* one index per pool */
 	PyObject *result;               /* most recently returned result tuple */
 	int stopped;                    /* set to 1 when the product iterator is exhausted */
@@ -1784,7 +1783,6 @@
 	productobject *lz;
 	Py_ssize_t nargs, npools, repeat=1;
 	PyObject *pools = NULL;
-	Py_ssize_t *maxvec = NULL;
 	Py_ssize_t *indices = NULL;
 	Py_ssize_t i;
 
@@ -1809,9 +1807,8 @@
 	nargs = (repeat == 0) ? 0 : PyTuple_GET_SIZE(args);
 	npools = nargs * repeat;
 
-	maxvec = PyMem_Malloc(npools * sizeof(Py_ssize_t));
 	indices = PyMem_Malloc(npools * sizeof(Py_ssize_t));
-	if (maxvec == NULL || indices == NULL) {
+	if (indices == NULL) {
     		PyErr_NoMemory();
 		goto error;
 	}
@@ -1825,16 +1822,13 @@
 		PyObject *pool = PySequence_Tuple(item);
 		if (pool == NULL)
 			goto error;
-
 		PyTuple_SET_ITEM(pools, i, pool);
-		maxvec[i] = PyTuple_GET_SIZE(pool);
 		indices[i] = 0;
 	}
 	for ( ; i < npools; ++i) {
 		PyObject *pool = PyTuple_GET_ITEM(pools, i - nargs);
 		Py_INCREF(pool);
 		PyTuple_SET_ITEM(pools, i, pool);
-		maxvec[i] = maxvec[i - nargs];
 		indices[i] = 0;
 	}
 
@@ -1844,7 +1838,6 @@
 		goto error;
 
 	lz->pools = pools;
-	lz->maxvec = maxvec;
 	lz->indices = indices;
 	lz->result = NULL;
 	lz->stopped = 0;
@@ -1852,8 +1845,6 @@
 	return (PyObject *)lz;
 
 error:
-	if (maxvec != NULL)
-		PyMem_Free(maxvec);
 	if (indices != NULL)
 		PyMem_Free(indices);
 	Py_XDECREF(pools);
@@ -1866,7 +1857,6 @@
 	PyObject_GC_UnTrack(lz);
 	Py_XDECREF(lz->pools);
 	Py_XDECREF(lz->result);
-	PyMem_Free(lz->maxvec);
 	PyMem_Free(lz->indices);
 	Py_TYPE(lz)->tp_free(lz);
 }
@@ -1913,7 +1903,6 @@
 		}
 	} else {
 		Py_ssize_t *indices = lz->indices;
-		Py_ssize_t *maxvec = lz->maxvec;
 
 		/* Copy the previous result tuple or re-use it if available */
 		if (Py_REFCNT(result) > 1) {
@@ -1937,7 +1926,7 @@
 		for (i=npools-1 ; i >= 0 ; i--) {
 			pool = PyTuple_GET_ITEM(pools, i);
 			indices[i]++;
-			if (indices[i] == maxvec[i]) {
+			if (indices[i] == PyTuple_GET_SIZE(pool)) {
 				/* Roll-over and advance to next pool */
 				indices[i] = 0;
 				elem = PyTuple_GET_ITEM(pool, 0);


More information about the Python-checkins mailing list