Home | History | Annotate | Download | only in python2.7
      1 /* Descriptors */
      2 #ifndef Py_DESCROBJECT_H
      3 #define Py_DESCROBJECT_H
      4 #ifdef __cplusplus
      5 extern "C" {
      6 #endif
      7 
      8 typedef PyObject *(*getter)(PyObject *, void *);
      9 typedef int (*setter)(PyObject *, PyObject *, void *);
     10 
     11 typedef struct PyGetSetDef {
     12     char *name;
     13     getter get;
     14     setter set;
     15     char *doc;
     16     void *closure;
     17 } PyGetSetDef;
     18 
     19 typedef PyObject *(*wrapperfunc)(PyObject *self, PyObject *args,
     20                                  void *wrapped);
     21 
     22 typedef PyObject *(*wrapperfunc_kwds)(PyObject *self, PyObject *args,
     23                                       void *wrapped, PyObject *kwds);
     24 
     25 struct wrapperbase {
     26     char *name;
     27     int offset;
     28     void *function;
     29     wrapperfunc wrapper;
     30     char *doc;
     31     int flags;
     32     PyObject *name_strobj;
     33 };
     34 
     35 /* Flags for above struct */
     36 #define PyWrapperFlag_KEYWORDS 1 /* wrapper function takes keyword args */
     37 
     38 /* Various kinds of descriptor objects */
     39 
     40 #define PyDescr_COMMON \
     41     PyObject_HEAD \
     42     PyTypeObject *d_type; \
     43     PyObject *d_name
     44 
     45 typedef struct {
     46     PyDescr_COMMON;
     47 } PyDescrObject;
     48 
     49 typedef struct {
     50     PyDescr_COMMON;
     51     PyMethodDef *d_method;
     52 } PyMethodDescrObject;
     53 
     54 typedef struct {
     55     PyDescr_COMMON;
     56     struct PyMemberDef *d_member;
     57 } PyMemberDescrObject;
     58 
     59 typedef struct {
     60     PyDescr_COMMON;
     61     PyGetSetDef *d_getset;
     62 } PyGetSetDescrObject;
     63 
     64 typedef struct {
     65     PyDescr_COMMON;
     66     struct wrapperbase *d_base;
     67     void *d_wrapped; /* This can be any function pointer */
     68 } PyWrapperDescrObject;
     69 
     70 PyAPI_DATA(PyTypeObject) PyWrapperDescr_Type;
     71 PyAPI_DATA(PyTypeObject) PyDictProxy_Type;
     72 PyAPI_DATA(PyTypeObject) PyGetSetDescr_Type;
     73 PyAPI_DATA(PyTypeObject) PyMemberDescr_Type;
     74 
     75 PyAPI_FUNC(PyObject *) PyDescr_NewMethod(PyTypeObject *, PyMethodDef *);
     76 PyAPI_FUNC(PyObject *) PyDescr_NewClassMethod(PyTypeObject *, PyMethodDef *);
     77 PyAPI_FUNC(PyObject *) PyDescr_NewMember(PyTypeObject *,
     78                                                struct PyMemberDef *);
     79 PyAPI_FUNC(PyObject *) PyDescr_NewGetSet(PyTypeObject *,
     80                                                struct PyGetSetDef *);
     81 PyAPI_FUNC(PyObject *) PyDescr_NewWrapper(PyTypeObject *,
     82                                                 struct wrapperbase *, void *);
     83 #define PyDescr_IsData(d) (Py_TYPE(d)->tp_descr_set != NULL)
     84 
     85 PyAPI_FUNC(PyObject *) PyDictProxy_New(PyObject *);
     86 PyAPI_FUNC(PyObject *) PyWrapper_New(PyObject *, PyObject *);
     87 
     88 
     89 PyAPI_DATA(PyTypeObject) PyProperty_Type;
     90 #ifdef __cplusplus
     91 }
     92 #endif
     93 #endif /* !Py_DESCROBJECT_H */
     94 
     95