3.9 C Union Types
procedure
(make-union-type type ...+) → ctype?
type : ctype?
The primitive type constructor for creating new C union types. Like C
struct types, union types are new primitive types with no conversion
functions associated. Unions are always treated like structs with
'atomic allocation mode.
Example:
> (make-union-type (_list-struct _int _int) (_list-struct _double _double)) #<compound-ctype>
Creates a union type whose Racket representation is a union that
works with union-ref and union-set!. The union is
not copied; the Racket representation is backed by the underlying C
representation.
Example:
> (_union (_list-struct _int _int) (_list-struct _double _double)) #<compound-ctype>
Examples:
> (define a-union-type (_union (_list-struct _int _int) (_list-struct _double _double)))
> (define a-union-val (cast (list 3.14 2.71) (_list-struct _double _double) a-union-type)) > (union? a-union-val) #t
> (union? 3) #f
procedure
u : union? i : exact-nonnegative-integer?
Extracts a variant from a union. The variants are indexed starting
at 0.
Examples:
; see examples for union? for definitions > (union-ref a-union-val 1) '(3.14 2.71)
procedure
(union-set! u i v) → void?
u : union? i : exact-nonnegative-integer? v : any/c
Sets a variant in a union.
Examples:
; see examples for union? for definitions > (union-set! a-union-val 0 (list 4 5)) > a-union-val #<union>
> (union-ref a-union-val 0) '(4 5)
Extracts the pointer for a union’s storage.
Example:
> (union-ptr a-union-val) #<cpointer+offset>