home *** CD-ROM | disk | FTP | other *** search
/ Freelog 33 / Freelog033.iso / Progr / Python-2.2.1.exe / DESCROBJECT.H < prev    next >
Encoding:
C/C++ Source or Header  |  2001-10-22  |  1.9 KB  |  81 lines

  1. /* Descriptors */
  2.  
  3. typedef PyObject *(*getter)(PyObject *, void *);
  4. typedef int (*setter)(PyObject *, PyObject *, void *);
  5.  
  6. typedef struct PyGetSetDef {
  7.     char *name;
  8.     getter get;
  9.     setter set;
  10.     char *doc;
  11.     void *closure;
  12. } PyGetSetDef;
  13.  
  14. typedef PyObject *(*wrapperfunc)(PyObject *self, PyObject *args,
  15.                  void *wrapped);
  16.  
  17. typedef PyObject *(*wrapperfunc_kwds)(PyObject *self, PyObject *args,
  18.                       void *wrapped, PyObject *kwds);
  19.  
  20. struct wrapperbase {
  21.     char *name;
  22.     int offset;
  23.     void *function;
  24.     wrapperfunc wrapper;
  25.     char *doc;
  26.     int flags;
  27.     PyObject *name_strobj;
  28. };
  29.  
  30. /* Flags for above struct */
  31. #define PyWrapperFlag_KEYWORDS 1 /* wrapper function takes keyword args */
  32.  
  33. /* Various kinds of descriptor objects */
  34.  
  35. #define PyDescr_COMMON \
  36.     PyObject_HEAD \
  37.     PyTypeObject *d_type; \
  38.     PyObject *d_name
  39.  
  40. typedef struct {
  41.     PyDescr_COMMON;
  42. } PyDescrObject;
  43.  
  44. typedef struct {
  45.     PyDescr_COMMON;
  46.     PyMethodDef *d_method;
  47. } PyMethodDescrObject;
  48.  
  49. typedef struct {
  50.     PyDescr_COMMON;
  51.     struct PyMemberDef *d_member;
  52. } PyMemberDescrObject;
  53.  
  54. typedef struct {
  55.     PyDescr_COMMON;
  56.     PyGetSetDef *d_getset;
  57. } PyGetSetDescrObject;
  58.  
  59. typedef struct {
  60.     PyDescr_COMMON;
  61.     struct wrapperbase *d_base;
  62.     void *d_wrapped; /* This can be any function pointer */
  63. } PyWrapperDescrObject;
  64.  
  65. extern DL_IMPORT(PyTypeObject) PyWrapperDescr_Type;
  66.  
  67. extern DL_IMPORT(PyObject *) PyDescr_NewMethod(PyTypeObject *, PyMethodDef *);
  68. extern DL_IMPORT(PyObject *) PyDescr_NewMember(PyTypeObject *,
  69.                            struct PyMemberDef *);
  70. extern DL_IMPORT(PyObject *) PyDescr_NewGetSet(PyTypeObject *,
  71.                            struct PyGetSetDef *);
  72. extern DL_IMPORT(PyObject *) PyDescr_NewWrapper(PyTypeObject *,
  73.                         struct wrapperbase *, void *);
  74. extern DL_IMPORT(int) PyDescr_IsData(PyObject *);
  75.  
  76. extern DL_IMPORT(PyObject *) PyDictProxy_New(PyObject *);
  77. extern DL_IMPORT(PyObject *) PyWrapper_New(PyObject *, PyObject *);
  78.  
  79.  
  80. extern DL_IMPORT(PyTypeObject) PyProperty_Type;
  81.