[cffi-devel] Bitfields and defcenum
Luís Oliveira
luismbo at gmail.com
Wed Feb 1 06:24:29 UTC 2006
Hello,
While building CFFI bindings for GLUT and using enums for defining
bitfield masks, I came across this example:
(defcenum display-mode
(:rgb 0)
(:rgba 0)
(:index 1)
(:single 0)
(:double 2)
(:accum 4)
(:alpha 8)
(:depth 16)
(:stencil 32)
(:multisample 128)
(:stereo 256)
(:luminance 512))
defcenum won't accept this because it contains duplicate values. This
a misfeature introduced by myself that I forgot to fix and people
have complained[1] about this before. Unless someone has any
objections, I'll implement something like what CLISP has.
But this makes me wonder if another abstraction, say DEFBITFIELD
would be useful. Something like:
(defbitfield name
(0 sym1 sym2 ...)
(1 sym3)
(2 sym4)
...)
Along with type translator on these types that would construct an
integer from a list of these symbols and vice-versa. Any other
suggestions before I push a patch with something like this?
BTW, I silently pushed a patch that adds a new option to defcenum by
allowing a base-type (when the default, :int, is not appropriate).
[1] http://article.gmane.org/gmane.lisp.cffi.devel/26
--
Luís Oliveira
http://student.dei.uc.pt/~lmoliv/
Equipa Portuguesa do Translation Project
http://www.iro.umontreal.ca/translation/registry.cgi?team=pt
More information about the cffi-devel
mailing list