Chris@87: /* Descriptors */ Chris@87: #ifndef Py_DESCROBJECT_H Chris@87: #define Py_DESCROBJECT_H Chris@87: #ifdef __cplusplus Chris@87: extern "C" { Chris@87: #endif Chris@87: Chris@87: typedef PyObject *(*getter)(PyObject *, void *); Chris@87: typedef int (*setter)(PyObject *, PyObject *, void *); Chris@87: Chris@87: typedef struct PyGetSetDef { Chris@87: char *name; Chris@87: getter get; Chris@87: setter set; Chris@87: char *doc; Chris@87: void *closure; Chris@87: } PyGetSetDef; Chris@87: Chris@87: typedef PyObject *(*wrapperfunc)(PyObject *self, PyObject *args, Chris@87: void *wrapped); Chris@87: Chris@87: typedef PyObject *(*wrapperfunc_kwds)(PyObject *self, PyObject *args, Chris@87: void *wrapped, PyObject *kwds); Chris@87: Chris@87: struct wrapperbase { Chris@87: char *name; Chris@87: int offset; Chris@87: void *function; Chris@87: wrapperfunc wrapper; Chris@87: char *doc; Chris@87: int flags; Chris@87: PyObject *name_strobj; Chris@87: }; Chris@87: Chris@87: /* Flags for above struct */ Chris@87: #define PyWrapperFlag_KEYWORDS 1 /* wrapper function takes keyword args */ Chris@87: Chris@87: /* Various kinds of descriptor objects */ Chris@87: Chris@87: #define PyDescr_COMMON \ Chris@87: PyObject_HEAD \ Chris@87: PyTypeObject *d_type; \ Chris@87: PyObject *d_name Chris@87: Chris@87: typedef struct { Chris@87: PyDescr_COMMON; Chris@87: } PyDescrObject; Chris@87: Chris@87: typedef struct { Chris@87: PyDescr_COMMON; Chris@87: PyMethodDef *d_method; Chris@87: } PyMethodDescrObject; Chris@87: Chris@87: typedef struct { Chris@87: PyDescr_COMMON; Chris@87: struct PyMemberDef *d_member; Chris@87: } PyMemberDescrObject; Chris@87: Chris@87: typedef struct { Chris@87: PyDescr_COMMON; Chris@87: PyGetSetDef *d_getset; Chris@87: } PyGetSetDescrObject; Chris@87: Chris@87: typedef struct { Chris@87: PyDescr_COMMON; Chris@87: struct wrapperbase *d_base; Chris@87: void *d_wrapped; /* This can be any function pointer */ Chris@87: } PyWrapperDescrObject; Chris@87: Chris@87: PyAPI_DATA(PyTypeObject) PyWrapperDescr_Type; Chris@87: PyAPI_DATA(PyTypeObject) PyDictProxy_Type; Chris@87: PyAPI_DATA(PyTypeObject) PyGetSetDescr_Type; Chris@87: PyAPI_DATA(PyTypeObject) PyMemberDescr_Type; Chris@87: Chris@87: PyAPI_FUNC(PyObject *) PyDescr_NewMethod(PyTypeObject *, PyMethodDef *); Chris@87: PyAPI_FUNC(PyObject *) PyDescr_NewClassMethod(PyTypeObject *, PyMethodDef *); Chris@87: PyAPI_FUNC(PyObject *) PyDescr_NewMember(PyTypeObject *, Chris@87: struct PyMemberDef *); Chris@87: PyAPI_FUNC(PyObject *) PyDescr_NewGetSet(PyTypeObject *, Chris@87: struct PyGetSetDef *); Chris@87: PyAPI_FUNC(PyObject *) PyDescr_NewWrapper(PyTypeObject *, Chris@87: struct wrapperbase *, void *); Chris@87: #define PyDescr_IsData(d) (Py_TYPE(d)->tp_descr_set != NULL) Chris@87: Chris@87: PyAPI_FUNC(PyObject *) PyDictProxy_New(PyObject *); Chris@87: PyAPI_FUNC(PyObject *) PyWrapper_New(PyObject *, PyObject *); Chris@87: Chris@87: Chris@87: PyAPI_DATA(PyTypeObject) PyProperty_Type; Chris@87: #ifdef __cplusplus Chris@87: } Chris@87: #endif Chris@87: #endif /* !Py_DESCROBJECT_H */ Chris@87: