On 2006-jan-24, at 03:59, Frank Buss wrote:
How does this work with anonymous enums? E.g. like this (C code) :

enum { SDL_NOEVENT = 0,
       SDL_ACTIVEEVENT,
       SDL_KEYDOWN,
       SDL_KEYUP,
};
#define SDL_EVENTMASK(X)        (1<<(X))
enum {
        SDL_ACTIVEEVENTMASK     = SDL_EVENTMASK(SDL_ACTIVEEVENT),
        SDL_KEYDOWNMASK         = SDL_EVENTMASK(SDL_KEYDOWN),
        SDL_KEYUPMASK           = SDL_EVENTMASK(SDL_KEYUP),
};

setEventMask(SDL_ACTIVEEVENTMASK | SDL_KEYUPMASK);

How would you translate this to Lisp with CFFI? With my def-anon- emum macro, which translates just to defconstant, it would be easy, but perhaps there
are better ways to do it.

(defcenum event
  :no-event
  :active-event
  :key-down
  :key-up)

(defmacro define-event-mask (name keyword)
  `(defconstant ,name (ash 1 (foreign-enum-value 'event ',keyword))))

(define-event-mask +active-event-mask+ :active-event)
(define-event-mask +key-down-mask+     :key-down)
(define-event-mask +key-up-mask+       :key-up)


I understand what you mean now anyway. I suppose some helpers for dealing with constants and masks might be nice. :-)

--
Luís Oliveira
http://student.dei.uc.pt/~lmoliv/
Equipa Portuguesa do Translation Project
http://www.iro.umontreal.ca/translation/registry.cgi?team=pt

_______________________________________________
cffi-devel mailing list
cffi-devel@common-lisp.net
http://common-lisp.net/cgi-bin/mailman/listinfo/cffi-devel

Reply via email to