enum-list ::= [docstring] { keyword | (keyword value) }* name-and-options ::= name | (name &optional (base-type :int))
The defcenum
macro is used to define foreign types that map
keyword symbols to integer values, similar to the C enum
type.
If value is omitted its value will either be 0, if it's the first entry, or it it will continue the progression from the last specified value.
Keywords will be automatically converted to values and vice-versa when
being passed as arguments to or returned from foreign functions,
respectively. The same applies to any other situations where an object
of an enum
type is expected.
Types defined with defcenum
canonicalize to base-type
which is :int
by default.
(defcenum boolean :no :yes) CFFI> (foreign-enum-value 'boolean :no) => 0
(defcenum numbers (:one 1) :two (:four 4)) CFFI> (foreign-enum-keyword 'numbers 2) => :TWO