[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