diff options
author | Raymond Hettinger <python@rcn.com> | 2004-12-16 16:23:40 +0000 |
---|---|---|
committer | Raymond Hettinger <python@rcn.com> | 2004-12-16 16:23:40 +0000 |
commit | 22872a09781e0e855ac9de682dd261c617459386 (patch) | |
tree | fa3ef38b870e6f85585a9d954c28d29ae295f14d /Modules/arraymodule.c | |
parent | bd8a46b8723f89d15e0f79b15687ad1859991aff (diff) | |
download | cpython-22872a09781e0e855ac9de682dd261c617459386.tar.gz |
SF #1085304: Make array.array pickle-able
Diffstat (limited to 'Modules/arraymodule.c')
-rw-r--r-- | Modules/arraymodule.c | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index 7ed3b73d53..6430333001 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -1133,6 +1133,29 @@ Byteswap all items of the array. If the items in the array are not 1, 2,\n\ 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 @@ PyMethodDef array_methods[] = { 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, |