93 lines · 2.5 KB · C
RawDownload
#ifndef Py_STRUCTMEMBER_H#define Py_STRUCTMEMBER_H#ifdef __cplusplusextern "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 #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 */ /* Flags */#define READONLY	1#define RO		READONLY		/* Shorthand */#define READ_RESTRICTED	2#define WRITE_RESTRICTED 4#define RESTRICTED	(READ_RESTRICTED | 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 */