jpayne@69: #ifndef Py_STRUCTMEMBER_H jpayne@69: #define Py_STRUCTMEMBER_H jpayne@69: #ifdef __cplusplus jpayne@69: extern "C" { jpayne@69: #endif jpayne@69: jpayne@69: jpayne@69: /* Interface to map C struct members to Python object attributes */ jpayne@69: jpayne@69: #include /* For offsetof */ jpayne@69: jpayne@69: /* An array of PyMemberDef structures defines the name, type and offset jpayne@69: of selected members of a C structure. These can be read by jpayne@69: PyMember_GetOne() and set by PyMember_SetOne() (except if their READONLY jpayne@69: flag is set). The array must be terminated with an entry whose name jpayne@69: pointer is NULL. */ jpayne@69: jpayne@69: typedef struct PyMemberDef { jpayne@69: const char *name; jpayne@69: int type; jpayne@69: Py_ssize_t offset; jpayne@69: int flags; jpayne@69: const char *doc; jpayne@69: } PyMemberDef; jpayne@69: jpayne@69: /* Types */ jpayne@69: #define T_SHORT 0 jpayne@69: #define T_INT 1 jpayne@69: #define T_LONG 2 jpayne@69: #define T_FLOAT 3 jpayne@69: #define T_DOUBLE 4 jpayne@69: #define T_STRING 5 jpayne@69: #define T_OBJECT 6 jpayne@69: /* XXX the ordering here is weird for binary compatibility */ jpayne@69: #define T_CHAR 7 /* 1-character string */ jpayne@69: #define T_BYTE 8 /* 8-bit signed int */ jpayne@69: /* unsigned variants: */ jpayne@69: #define T_UBYTE 9 jpayne@69: #define T_USHORT 10 jpayne@69: #define T_UINT 11 jpayne@69: #define T_ULONG 12 jpayne@69: jpayne@69: /* Added by Jack: strings contained in the structure */ jpayne@69: #define T_STRING_INPLACE 13 jpayne@69: jpayne@69: /* Added by Lillo: bools contained in the structure (assumed char) */ jpayne@69: #define T_BOOL 14 jpayne@69: jpayne@69: #define T_OBJECT_EX 16 /* Like T_OBJECT, but raises AttributeError jpayne@69: when the value is NULL, instead of jpayne@69: converting to None. */ jpayne@69: #define T_LONGLONG 17 jpayne@69: #define T_ULONGLONG 18 jpayne@69: jpayne@69: #define T_PYSSIZET 19 /* Py_ssize_t */ jpayne@69: #define T_NONE 20 /* Value is always None */ jpayne@69: jpayne@69: jpayne@69: /* Flags */ jpayne@69: #define READONLY 1 jpayne@69: #define READ_RESTRICTED 2 jpayne@69: #define PY_WRITE_RESTRICTED 4 jpayne@69: #define RESTRICTED (READ_RESTRICTED | PY_WRITE_RESTRICTED) jpayne@69: jpayne@69: jpayne@69: /* Current API, use this */ jpayne@69: PyAPI_FUNC(PyObject *) PyMember_GetOne(const char *, struct PyMemberDef *); jpayne@69: PyAPI_FUNC(int) PyMember_SetOne(char *, struct PyMemberDef *, PyObject *); jpayne@69: jpayne@69: jpayne@69: #ifdef __cplusplus jpayne@69: } jpayne@69: #endif jpayne@69: #endif /* !Py_STRUCTMEMBER_H */