blob: 3886ea5d48b291b2292231e033de0310d6519ab3 [file] [log] [blame]
Fred Drake8844d522001-10-05 21:52:26 +00001/* Weak references objects for Python. */
2
3#ifndef Py_WEAKREFOBJECT_H
4#define Py_WEAKREFOBJECT_H
5#ifdef __cplusplus
6extern "C" {
7#endif
8
9
10typedef struct _PyWeakReference PyWeakReference;
11
12struct _PyWeakReference {
13 PyObject_HEAD
14 PyObject *wr_object;
15 PyObject *wr_callback;
16 long hash;
17 PyWeakReference *wr_prev;
18 PyWeakReference *wr_next;
19};
20
21extern DL_IMPORT(PyTypeObject) _PyWeakref_RefType;
22extern DL_IMPORT(PyTypeObject) _PyWeakref_ProxyType;
23extern DL_IMPORT(PyTypeObject) _PyWeakref_CallableProxyType;
24
25extern DL_IMPORT(PyObject *) PyErr_ReferenceError;
26
27#define PyWeakref_CheckRef(op) \
28 ((op)->ob_type == &_PyWeakref_RefType)
29#define PyWeakref_CheckProxy(op) \
30 (((op)->ob_type == &_PyWeakref_ProxyType) || \
31 ((op)->ob_type == &_PyWeakref_CallableProxyType))
32#define PyWeakref_Check(op) \
33 (PyWeakref_CheckRef(op) || PyWeakref_CheckProxy(op))
34
35
36extern DL_IMPORT(PyObject *) PyWeakref_NewRef(PyObject *ob,
37 PyObject *callback);
38extern DL_IMPORT(PyObject *) PyWeakref_NewProxy(PyObject *ob,
39 PyObject *callback);
40extern DL_IMPORT(PyObject *) PyWeakref_GetObject(PyObject *ref);
41
42extern DL_IMPORT(long) _PyWeakref_GetWeakrefCount(PyWeakReference *head);
43
44#define PyWeakref_GET_OBJECT(ref) (((PyWeakReference *)(ref))->wr_object)
45
46
47#ifdef __cplusplus
48}
49#endif
50#endif /* !Py_WEAKREFOBJECT_H */