cinap_lenrekadd hg and python4bb9e2215 years agoHistory
2141 lines · 51.1 KB · C
RawDownload
	Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_WEAKREFS,  /* tp_flags */	arraytype_doc,				/* tp_doc */ 	0,					/* tp_traverse */	0,					/* tp_clear */	array_richcompare,			/* tp_richcompare */	offsetof(arrayobject, weakreflist),	/* tp_weaklistoffset */	(getiterfunc)array_iter,		/* tp_iter */	0,					/* tp_iternext */	array_methods,				/* tp_methods */	0,					/* tp_members */	array_getsets,				/* tp_getset */	0,					/* tp_base */	0,					/* tp_dict */	0,					/* tp_descr_get */	0,					/* tp_descr_set */	0,					/* tp_dictoffset */	0,					/* tp_init */	PyType_GenericAlloc,			/* tp_alloc */	array_new,				/* tp_new */	PyObject_Del,				/* tp_free */};  /*********************** Array Iterator **************************/ typedef struct {	PyObject_HEAD	Py_ssize_t			index;	arrayobject		*ao;	PyObject		* (*getitem)(struct arrayobject *, Py_ssize_t);} arrayiterobject; static PyTypeObject PyArrayIter_Type; #define PyArrayIter_Check(op) PyObject_TypeCheck(op, &PyArrayIter_Type) static PyObject *array_iter(arrayobject *ao){	arrayiterobject *it; 	if (!array_Check(ao)) {		PyErr_BadInternalCall();		return NULL;	} 	it = PyObject_GC_New(arrayiterobject, &PyArrayIter_Type);	if (it == NULL)		return NULL; 	Py_INCREF(ao);	it->ao = ao;	it->index = 0;	it->getitem = ao->ob_descr->getitem;	PyObject_GC_Track(it);	return (PyObject *)it;} static PyObject *arrayiter_next(arrayiterobject *it){	assert(PyArrayIter_Check(it));	if (it->index < it->ao->ob_size)		return (*it->getitem)(it->ao, it->index++);	return NULL;} static voidarrayiter_dealloc(arrayiterobject *it){	PyObject_GC_UnTrack(it);	Py_XDECREF(it->ao);	PyObject_GC_Del(it);} static intarrayiter_traverse(arrayiterobject *it, visitproc visit, void *arg){	Py_VISIT(it->ao);	return 0;} static PyTypeObject PyArrayIter_Type = {	PyObject_HEAD_INIT(NULL)	0,                                      /* ob_size */	"arrayiterator",                        /* tp_name */	sizeof(arrayiterobject),                /* tp_basicsize */	0,                                      /* tp_itemsize */	/* methods */	(destructor)arrayiter_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)arrayiter_traverse,	/* tp_traverse */	0,					/* tp_clear */	0,                                      /* tp_richcompare */	0,                                      /* tp_weaklistoffset */	PyObject_SelfIter,			/* tp_iter */	(iternextfunc)arrayiter_next,		/* tp_iternext */	0,					/* tp_methods */};  /*********************** Install Module **************************/ /* No functions in array module. */static PyMethodDef a_methods[] = {    {NULL, NULL, 0, NULL}        /* Sentinel */};  PyMODINIT_FUNCinitarray(void){	PyObject *m; 	Arraytype.ob_type = &PyType_Type;	PyArrayIter_Type.ob_type = &PyType_Type;	m = Py_InitModule3("array", a_methods, module_doc);	if (m == NULL)		return;         Py_INCREF((PyObject *)&Arraytype);	PyModule_AddObject(m, "ArrayType", (PyObject *)&Arraytype);        Py_INCREF((PyObject *)&Arraytype);	PyModule_AddObject(m, "array", (PyObject *)&Arraytype);	/* No need to check the error here, the caller will do that */}

Lines 2001–2141 of 2141. Previous lines