diff Modules/arraymodule.c @ 34174:30b97c1bb12d legacy-trunk

SF #1085304: Make array.array pickle-able
author Raymond Hettinger <python@rcn.com>
date Thu, 16 Dec 2004 16:23:40 +0000
parents 0b181bf230c9
children 1fdfd0130e28
line wrap: on
line diff
--- a/Modules/arraymodule.c	Thu Dec 16 15:10:21 2004 +0000
+++ b/Modules/arraymodule.c	Thu Dec 16 16:23:40 2004 +0000
@@ -1133,6 +1133,29 @@
 4, or 8 bytes in size, RuntimeError is raised.");
 
 static PyObject *
+array_reduce(arrayobject *array)
+{
+	PyObject *dict, *result;
+
+	dict = PyObject_GetAttrString((PyObject *)array, "__dict__");
+	if (dict == NULL) {
+		PyErr_Clear();
+		dict = Py_None;
+		Py_INCREF(dict);
+	}
+	result = Py_BuildValue("O(cs#)O", 
+		array->ob_type, 
+		array->ob_descr->typecode,
+		array->ob_item,
+		array->ob_size * array->ob_descr->itemsize,
+		dict);
+	Py_DECREF(dict);
+	return result;
+}
+
+PyDoc_STRVAR(array_doc, "Return state information for pickling.");
+
+static PyObject *
 array_reverse(arrayobject *self, PyObject *unused)
 {
 	register int itemsize = self->ob_descr->itemsize;
@@ -1490,6 +1513,8 @@
 	 pop_doc},
 	{"read",	(PyCFunction)array_fromfile,	METH_VARARGS,
 	 fromfile_doc},
+	{"__reduce__",	(PyCFunction)array_reduce,	METH_NOARGS,
+	 array_doc},
 	{"remove",	(PyCFunction)array_remove,	METH_O,
 	 remove_doc},
 	{"reverse",	(PyCFunction)array_reverse,	METH_NOARGS,