- (define-array-allocators ...)syntax
Defines various procedures to manage memory for an armor type that will hold a C array of structs or unions. You can omit any procedures that you don't need. Also generates type declarations for the procedures that are defined.
See "Which allocator should I use?" in the Getting Started guide.
Usage:
(define-array-allocators (ARMOR-NAME "STRUCT_NAME" PRED WRAP) free: FREE ; optional alloc: ALLOC ; optional alloc/blob: ALLOC/BLOB ; optional make: MAKE ; optional make/af: MAKE/AUTOFREE ; optional make/blob: MAKE/BLOB ; optional defaults: (SLOT-DEFAULT ...) ; optional
This is very similar to define-struct-allocators, except that the "alloc" and "make" procedures take a length argument for the number of items in the array.
"STRUCT_NAME" is a string containing the name of the C struct/union (not the array type), exactly as it appears in C. For example, for an array of FOO_Event structs, just write "FOO_Event".
FREE will be defined as an array freer, ALLOC and ALLOC/BLOB will be defined as array memory allocators, and MAKE, MAKE/AUTOFREE, and MAKE/BLOB will be defined as array makers.
The SLOT-DEFAULTs are the defaults for the slots after the first. They should not include a default for first slot, which is recommended to hold the array length. The "make" procedures will call (WRAP data length SLOT-DEFAULT ...).
Example:
(define-array-allocators (event "FOO_Event" event? wrap-event) free: free-event! alloc: alloc-event alloc/blob: alloc-event/blob make: make-event make/af: make-event/autofree make/blob: make-event/blob defaults: ("e1" 'e2)) ; defaults for `extra1' and `extra2'