aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/tools/python/src/Include/structmember.h
blob: dfa5073aeacae8a4934f2857b2ac0bdd89ff2a81 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#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 */