diff options
| author | Raymond Hettinger <python@rcn.com> | 2008-03-13 02:09:15 +0000 | 
|---|---|---|
| committer | Raymond Hettinger <python@rcn.com> | 2008-03-13 02:09:15 +0000 | 
| commit | 736c0ab428e69b1be67bd91969477e5227613241 (patch) | |
| tree | 59193c21fa061c593f7eb264f19bcd406239a63d /Objects | |
| parent | c5a2eb949c5c19ed6d4dcada55ac970b5cc6c123 (diff) | |
| download | cpython-git-736c0ab428e69b1be67bd91969477e5227613241.tar.gz | |
Move itertools izip() code to builtins as zip().  Complete the renaming.
Diffstat (limited to 'Objects')
| -rw-r--r-- | Objects/iterobject.c | 169 | 
1 files changed, 0 insertions, 169 deletions
diff --git a/Objects/iterobject.c b/Objects/iterobject.c index 454c405926..95ee56d039 100644 --- a/Objects/iterobject.c +++ b/Objects/iterobject.c @@ -230,172 +230,3 @@ PyTypeObject PyCallIter_Type = {  }; -/*********************** Zip Iterator **************************/ -/* Largely copied from itertools.c by Brian Holmes */ - -typedef struct zipiterobject_t { -	PyObject_HEAD -	PyTupleObject *it_tuple;  /* Set to NULL when iterator is exhausted */ -        Py_ssize_t resultsize;	 -	PyTupleObject *result;	/* Reusable tuple for optimization */ -} zipiterobject; - - /* Forward */ - -PyObject * -_PyZip_CreateIter(PyObject* args) -{ -	Py_ssize_t i; -        Py_ssize_t tuplesize; -	PyObject* ziptuple; -	PyObject* result; -	struct zipiterobject_t* zipiter; -         -        assert(PyTuple_Check(args)); - -	if (Py_TYPE(&PyZipIter_Type) == NULL) { -		if (PyType_Ready(&PyZipIter_Type) < 0) -			return NULL; -	} - -	tuplesize = PySequence_Length((PyObject*) args); - -	ziptuple = PyTuple_New(tuplesize); -	if (ziptuple == NULL) -		return NULL; - -	for (i = 0; i < tuplesize; i++) { -		PyObject *o = PyTuple_GET_ITEM(args, i); -		PyObject *it = PyObject_GetIter(o); -		if (it == NULL) { -			/* XXX Should we do this? -			if (PyErr_ExceptionMatches(PyExc_TypeError)) -				PyErr_Format(PyExc_TypeError,  -				  "zip argument #%zd must support iteration", -					I+1); -			*/ -			Py_DECREF(ziptuple); -			return NULL; -		} -		PyTuple_SET_ITEM(ziptuple, i, it); -	} - -        /* create a reusable result holder */ -        result = PyTuple_New(tuplesize); -        if (result == NULL) { -                Py_DECREF(ziptuple); -                return NULL; -        } -        for (i = 0; i < tuplesize; i++) { -                Py_INCREF(Py_None); -                PyTuple_SET_ITEM(result, i, Py_None); -        } -	 -	zipiter = PyObject_GC_New(zipiterobject, &PyZipIter_Type); -	if (zipiter == NULL) { -		Py_DECREF(ziptuple); -		Py_DECREF(result); -		return NULL; -	} - -	zipiter->result = (PyTupleObject*) result; -        zipiter->resultsize = tuplesize; -	zipiter->it_tuple = (PyTupleObject *) ziptuple; -	_PyObject_GC_TRACK(zipiter); -	return (PyObject *)zipiter; -} - -static void -zipiter_dealloc(zipiterobject *it) -{ -	_PyObject_GC_UNTRACK(it); -	Py_XDECREF(it->it_tuple); -	Py_XDECREF(it->result); -	PyObject_GC_Del(it); -} - -static int -zipiter_traverse(zipiterobject *it, visitproc visit, void *arg) -{ -	Py_VISIT(it->it_tuple); -	Py_VISIT(it->result); -	return 0; -} - -static PyObject * -zipiter_next(zipiterobject *zit) -{ -        Py_ssize_t i; -        Py_ssize_t tuplesize = zit->resultsize; -        PyObject *result = (PyObject*) zit->result; -        PyObject *olditem; - -        if (tuplesize == 0) -                return NULL; - -        if (result->ob_refcnt == 1) { -		Py_INCREF(result); -		for (i = 0; i < tuplesize; i++) { -			PyObject *it = PyTuple_GET_ITEM(zit->it_tuple, i); -			PyObject *item; -			assert(PyIter_Check(it)); -			item = (*it->ob_type->tp_iternext)(it); -			if (item == NULL) { -				Py_DECREF(result); -				return NULL; -			} -			olditem = PyTuple_GET_ITEM(result, i); -			PyTuple_SET_ITEM(result, i, item); -			Py_DECREF(olditem); -		} -	} else { -		result = PyTuple_New(tuplesize); -		if (result == NULL) -			return NULL; -		for (i = 0; i < tuplesize; i++) { -			PyObject *it = PyTuple_GET_ITEM(zit->it_tuple, i); -			PyObject *item; -			assert(PyIter_Check(it)); -			item = (*it->ob_type->tp_iternext)(it); -			if (item == NULL) { -				Py_DECREF(result); -				return NULL; -			} -			PyTuple_SET_ITEM(result, i, item); -		} -	} -	return result; -} - -PyTypeObject PyZipIter_Type = { -	PyVarObject_HEAD_INIT(0, 0) -	"zip_iterator",				/* tp_name */ -	sizeof(zipiterobject),			/* tp_basicsize */ -	0,					/* tp_itemsize */ -	/* methods */ -	(destructor)zipiter_dealloc,		/* tp_dealloc */ -	0,					/* tp_print */ -	0,					/* tp_getattr */ -	0,					/* tp_setattr */ -	0,					/* tp_compare */ -	0,					/* tp_repr */ -	0,					/* tp_as_number */ -	0,					/* tp_as_sequence */ -	0,					/* tp_as_mapping */ -	0,					/* tp_hash */ -	0,					/* tp_call */ -	0,					/* tp_str */ -	PyObject_GenericGetAttr,		/* tp_getattro */ -	0,					/* tp_setattro */ -	0,					/* tp_as_buffer */ -	Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,/* tp_flags */ -	0,					/* tp_doc */ -	(traverseproc)zipiter_traverse,		/* tp_traverse */ -	0,					/* tp_clear */ -	0,					/* tp_richcompare */ -	0,					/* tp_weakzipoffset */ -	PyObject_SelfIter,			/* tp_iter */ -	(iternextfunc)zipiter_next,		/* tp_iternext */ -	0,					/* tp_methods */ -	0,					/* tp_members */ -};  | 
