2014-05-17 8 views
100

W jaki sposób chciałbym kodować ten fragment kodu C w pliku .chs, aby c2hs mogło przekształcić go w coś stosunkowo miłego?Łączenie ze strukturami i anonimowymi związkami za pomocą c2hs

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; 
    }; 
}; 
+12

Najprościej jest najpierw spróbować rozwiązać problem, a następnie podać szczegółowe pytania dotyczące języka i/lub narzędzi. Pytania, które znajdują się w centrum każdego zamieszania i unikają niepotrzebnej złożoności konkretnej aplikacji, są jeszcze lepsze. Na przykład, możesz zapytać o prostą strukturę i/lub o prosty związek, a następnie zastosować tę wiedzę do swojego problemu. –

+2

@ ThomasM.DuBuisson Myślę, że masz racjonalny punkt. Zamierzam przerobić to nieco dalej. – filib

+0

@unsymbol czy masz odpowiedź na swoje pytanie? Proszę rozważyć dodanie go tutaj :) – alfakini

Odpowiedz

1

Co powiesz na to: zmień kod, aby podać nazwiska członków. Układ w pamięci jest taki sam, aby był zgodny z binarnymi. Trzeba by było zrobić tę poprawkę dla każdej wersji biblioteki.

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; 
    }; 
}; 
Powiązane problemy