Converts between a FLI union and a C union
type.
keyword
:union &rest slots
slots ::= {symbol | (symbol type)}*
slots |
A sequence of one or more slots making up the union. |
symbol⇩ |
A symbol naming the slot. |
type⇩ |
The slot type. If no type is given, it defaults to an :int. |
The FLI type :union
is an aggregate type, and converts between a FLI union and a C union
type. The FLI union consists of a collection of one or more slots, only one of which can be active at any one time. The size of the whole union structure is therefore equal to the size of the largest slot. Each slot has a name symbol and a type type.
The foreign-slot-names, foreign-slot-type, and foreign-slot-value functions can be used to access and change the slots of the union. The convenience FLI function define-c-union is provided to simplify the definition of unions.
In the following example a union type with two slots is defined.
(fli:define-c-union my-number (small :byte) (large :int))
An instance of the union is allocated and bound to the Lisp variable length
.
(setq length (fli:allocate-foreign-object :type 'my-number))
Finally, the small
slot of the union is set equal to 24
.
(setf (fli:foreign-slot-value length 'small))
define-c-union
foreign-slot-names
foreign-slot-offset
foreign-slot-pointer
foreign-slot-type
foreign-slot-value
2.2.3 Structures and unions
Foreign Language Interface User Guide and Reference Manual - 01 Dec 2021 19:34:59