+++ /dev/null
-#include "Python.h"\r
-\r
-\r
-#define GET_WEAKREFS_LISTPTR(o) \\r
- ((PyWeakReference **) PyObject_GET_WEAKREFS_LISTPTR(o))\r
-\r
-\r
-PyDoc_STRVAR(weakref_getweakrefcount__doc__,\r
-"getweakrefcount(object) -- return the number of weak references\n"\r
-"to 'object'.");\r
-\r
-static PyObject *\r
-weakref_getweakrefcount(PyObject *self, PyObject *object)\r
-{\r
- PyObject *result = NULL;\r
-\r
- if (PyType_SUPPORTS_WEAKREFS(Py_TYPE(object))) {\r
- PyWeakReference **list = GET_WEAKREFS_LISTPTR(object);\r
-\r
- result = PyInt_FromSsize_t(_PyWeakref_GetWeakrefCount(*list));\r
- }\r
- else\r
- result = PyInt_FromLong(0);\r
-\r
- return result;\r
-}\r
-\r
-\r
-PyDoc_STRVAR(weakref_getweakrefs__doc__,\r
-"getweakrefs(object) -- return a list of all weak reference objects\n"\r
-"that point to 'object'.");\r
-\r
-static PyObject *\r
-weakref_getweakrefs(PyObject *self, PyObject *object)\r
-{\r
- PyObject *result = NULL;\r
-\r
- if (PyType_SUPPORTS_WEAKREFS(Py_TYPE(object))) {\r
- PyWeakReference **list = GET_WEAKREFS_LISTPTR(object);\r
- Py_ssize_t count = _PyWeakref_GetWeakrefCount(*list);\r
-\r
- result = PyList_New(count);\r
- if (result != NULL) {\r
- PyWeakReference *current = *list;\r
- Py_ssize_t i;\r
- for (i = 0; i < count; ++i) {\r
- PyList_SET_ITEM(result, i, (PyObject *) current);\r
- Py_INCREF(current);\r
- current = current->wr_next;\r
- }\r
- }\r
- }\r
- else {\r
- result = PyList_New(0);\r
- }\r
- return result;\r
-}\r
-\r
-\r
-PyDoc_STRVAR(weakref_proxy__doc__,\r
-"proxy(object[, callback]) -- create a proxy object that weakly\n"\r
-"references 'object'. 'callback', if given, is called with a\n"\r
-"reference to the proxy when 'object' is about to be finalized.");\r
-\r
-static PyObject *\r
-weakref_proxy(PyObject *self, PyObject *args)\r
-{\r
- PyObject *object;\r
- PyObject *callback = NULL;\r
- PyObject *result = NULL;\r
-\r
- if (PyArg_UnpackTuple(args, "proxy", 1, 2, &object, &callback)) {\r
- result = PyWeakref_NewProxy(object, callback);\r
- }\r
- return result;\r
-}\r
-\r
-\r
-static PyMethodDef\r
-weakref_functions[] = {\r
- {"getweakrefcount", weakref_getweakrefcount, METH_O,\r
- weakref_getweakrefcount__doc__},\r
- {"getweakrefs", weakref_getweakrefs, METH_O,\r
- weakref_getweakrefs__doc__},\r
- {"proxy", weakref_proxy, METH_VARARGS,\r
- weakref_proxy__doc__},\r
- {NULL, NULL, 0, NULL}\r
-};\r
-\r
-\r
-PyMODINIT_FUNC\r
-init_weakref(void)\r
-{\r
- PyObject *m;\r
-\r
- m = Py_InitModule3("_weakref", weakref_functions,\r
- "Weak-reference support module.");\r
- if (m != NULL) {\r
- Py_INCREF(&_PyWeakref_RefType);\r
- PyModule_AddObject(m, "ref",\r
- (PyObject *) &_PyWeakref_RefType);\r
- Py_INCREF(&_PyWeakref_RefType);\r
- PyModule_AddObject(m, "ReferenceType",\r
- (PyObject *) &_PyWeakref_RefType);\r
- Py_INCREF(&_PyWeakref_ProxyType);\r
- PyModule_AddObject(m, "ProxyType",\r
- (PyObject *) &_PyWeakref_ProxyType);\r
- Py_INCREF(&_PyWeakref_CallableProxyType);\r
- PyModule_AddObject(m, "CallableProxyType",\r
- (PyObject *) &_PyWeakref_CallableProxyType);\r
- }\r
-}\r