Guido van Rossum | 3f5da24 | 1990-12-20 15:06:42 +0000 | [diff] [blame^] | 1 | /* Interface to map C struct members to Python object attributes */ |
| 2 | |
| 3 | /* The offsetof() macro calculates the offset of a structure member |
| 4 | in its structure. Unfortunately this cannot be written down |
| 5 | portably, hence it is provided by a Standard C header file. |
| 6 | For pre-Standard C compilers, here is a version that usually works |
| 7 | (but watch out!): */ |
| 8 | |
| 9 | #ifndef offsetof |
| 10 | #define offsetof(type, member) ( (int) & ((type*)0) -> member ) |
| 11 | #endif |
| 12 | |
| 13 | /* An array of memberlist structures defines the name, type and offset |
| 14 | of selected members of a C structure. These can be read by |
| 15 | getmember() and set by setmember() (except if their READONLY flag |
| 16 | is set). The array must be terminated with an entry whose name |
| 17 | pointer is NULL. */ |
| 18 | |
| 19 | struct memberlist { |
| 20 | char *name; |
| 21 | int type; |
| 22 | int offset; |
| 23 | int readonly; |
| 24 | }; |
| 25 | |
| 26 | /* Types */ |
| 27 | #define T_SHORT 0 |
| 28 | #define T_INT 1 |
| 29 | #define T_LONG 2 |
| 30 | #define T_FLOAT 3 |
| 31 | #define T_DOUBLE 4 |
| 32 | #define T_STRING 5 |
| 33 | #define T_OBJECT 6 |
| 34 | |
| 35 | /* Readonly flag */ |
| 36 | #define READONLY 1 |
| 37 | #define RO READONLY /* Shorthand */ |
| 38 | |
| 39 | object *getmember PROTO((char *, struct memberlist *, char *)); |
| 40 | int setmember PROTO((char *, struct memberlist *, char *, object *)); |