uniones lenguaje funciones estructuras estructura entre ejemplos diferencia dev con arreglo anidadas haskell c2hs

haskell - lenguaje - funciones con estructuras en c



Interfaz con estructuras y uniones anĂ³nimas con c2hs (1)

¿Cómo se podría codificar este trozo de código C en un archivo .chs para que c2hs pueda transformarlo en algo relativamente agradable?

typedef enum { MONOME_BUTTON_UP = 0x00, MONOME_BUTTON_DOWN = 0x01, MONOME_ENCODER_DELTA = 0x02, MONOME_ENCODER_KEY_UP = 0x03, MONOME_ENCODER_KEY_DOWN = 0x04, MONOME_TILT = 0x05, /* update this if you add event types */ MONOME_EVENT_MAX = 0x06 } monome_event_type_t; typedef struct monome monome_t; /* opaque data type */ typedef struct monome_event monome_event_t; typedef void (*monome_event_callback_t) (const monome_event_t *event, void *data); struct monome_event { monome_t *monome; monome_event_type_t event_type; /* __extension__ for anonymous unions in gcc */ __extension__ union { struct { unsigned int x; unsigned int y; } grid; struct { unsigned int number; int delta; } encoder; struct { unsigned int sensor; int x; int y; int z; } tilt; }; };


Qué tal esto: cambie el código para que pueda nombrar a los miembros. El diseño en la memoria es el mismo para que sea binario compatible. Tendría que hacer este parche para cada versión de la lib.

struct monome_event { monome_t *monome; monome_event_type_t event_type; /* __extension__ for anonymous unions in gcc */ __extension__ union { struct me_grid { unsigned int x; unsigned int y; } grid; struct me_encoder { unsigned int number; int delta; } encoder; struct me_tilt { unsigned int sensor; int x; int y; int z; } tilt; }; };