| #ifndef Py_STRUCTMEMBER_H | |
| #define Py_STRUCTMEMBER_H | |
| #ifdef __cplusplus | |
| extern "C" { | |
| #endif | |
| /* Interface to map C struct members to Python object attributes */ | |
| #include <stddef.h> /* For offsetof */ | |
| /* The offsetof() macro calculates the offset of a structure member | |
| in its structure. Unfortunately this cannot be written down | |
| portably, hence it is provided by a Standard C header file. | |
| For pre-Standard C compilers, here is a version that usually works | |
| (but watch out!): */ | |
| #ifndef offsetof | |
| #define offsetof(type, member) ( (int) & ((type*)0) -> member ) | |
| #endif | |
| /* An array of memberlist structures defines the name, type and offset | |
| of selected members of a C structure. These can be read by | |
| PyMember_Get() and set by PyMember_Set() (except if their READONLY flag | |
| is set). The array must be terminated with an entry whose name | |
| pointer is NULL. */ | |
| struct memberlist { | |
| /* Obsolete version, for binary backwards compatibility */ | |
| char *name; | |
| int type; | |
| int offset; | |
| int flags; | |
| }; | |
| typedef struct PyMemberDef { | |
| /* Current version, use this */ | |
| char *name; | |
| int type; | |
| Py_ssize_t offset; | |
| int flags; | |
| char *doc; | |
| } PyMemberDef; | |
| /* Types */ | |
| #define T_SHORT 0 | |
| #define T_INT 1 | |
| #define T_LONG 2 | |
| #define T_FLOAT 3 | |
| #define T_DOUBLE 4 | |
| #define T_STRING 5 | |
| #define T_OBJECT 6 | |
| /* XXX the ordering here is weird for binary compatibility */ | |
| #define T_CHAR 7 /* 1-character string */ | |
| #define T_BYTE 8 /* 8-bit signed int */ | |
| /* unsigned variants: */ | |
| #define T_UBYTE 9 | |
| #define T_USHORT 10 | |
| #define T_UINT 11 | |
| #define T_ULONG 12 | |
| /* Added by Jack: strings contained in the structure */ | |
| #define T_STRING_INPLACE 13 | |
| /* Added by Lillo: bools contained in the structure (assumed char) */ | |
| #define T_BOOL 14 | |
| #define T_OBJECT_EX 16 /* Like T_OBJECT, but raises AttributeError | |
| when the value is NULL, instead of | |
| converting to None. */ | |
| #ifdef HAVE_LONG_LONG | |
| #define T_LONGLONG 17 | |
| #define T_ULONGLONG 18 | |
| #endif /* HAVE_LONG_LONG */ | |
| #define T_PYSSIZET 19 /* Py_ssize_t */ | |
| /* Flags */ | |
| #define READONLY 1 | |
| #define RO READONLY /* Shorthand */ | |
| #define READ_RESTRICTED 2 | |
| #define PY_WRITE_RESTRICTED 4 | |
| #define RESTRICTED (READ_RESTRICTED | PY_WRITE_RESTRICTED) | |
| /* Obsolete API, for binary backwards compatibility */ | |
| PyAPI_FUNC(PyObject *) PyMember_Get(const char *, struct memberlist *, const char *); | |
| PyAPI_FUNC(int) PyMember_Set(char *, struct memberlist *, const char *, PyObject *); | |
| /* Current API, use this */ | |
| PyAPI_FUNC(PyObject *) PyMember_GetOne(const char *, struct PyMemberDef *); | |
| PyAPI_FUNC(int) PyMember_SetOne(char *, struct PyMemberDef *, PyObject *); | |
| #ifdef __cplusplus | |
| } | |
| #endif | |
| #endif /* !Py_STRUCTMEMBER_H */ |