gawk: Array Data Types
16.4.11.1 Array Data Types
..........................
The data types associated with arrays are as follows:
'typedef void *awk_array_t;'
If you request the value of an array variable, you get back an
'awk_array_t' value. This value is opaque(1) to the extension; it
uniquely identifies the array but can only be used by passing it
into API functions or receiving it from API functions. This is
very similar to way 'FILE *' values are used with the '<stdio.h>'
library routines.
'typedef struct awk_element {'
' /* convenience linked list pointer, not used by gawk */'
' struct awk_element *next;'
' enum {'
' AWK_ELEMENT_DEFAULT = 0, /* set by gawk */'
' AWK_ELEMENT_DELETE = 1 /* set by extension */'
' } flags;'
' awk_value_t index;'
' awk_value_t value;'
'} awk_element_t;'
The 'awk_element_t' is a "flattened" array element. 'awk' produces
an array of these inside the 'awk_flat_array_t' (see the next
item). Individual elements may be marked for deletion. New
elements must be added individually, one at a time, using the
separate API for that purpose. The fields are as follows:
'struct awk_element *next;'
This pointer is for the convenience of extension writers. It
allows an extension to create a linked list of new elements
that can then be added to an array in a loop that traverses
the list.
'enum { ... } flags;'
A set of flag values that convey information between the
extension and 'gawk'. Currently there is only one:
'AWK_ELEMENT_DELETE'. Setting it causes 'gawk' to delete the
element from the original array upon release of the flattened
array.
'index'
'value'
The index and value of the element, respectively. _All_
memory pointed to by 'index' and 'value' belongs to 'gawk'.
'typedef struct awk_flat_array {'
' awk_const void *awk_const opaque1; /* for use by gawk */'
' awk_const void *awk_const opaque2; /* for use by gawk */'
' awk_const size_t count; /* how many elements */'
' awk_element_t elements[1]; /* will be extended */'
'} awk_flat_array_t;'
This is a flattened array. When an extension gets one of these
from 'gawk', the 'elements' array is of actual size 'count'. The
'opaque1' and 'opaque2' pointers are for use by 'gawk'; therefore
they are marked 'awk_const' so that the extension cannot modify
them.
---------- Footnotes ----------
(1) It is also a "cookie," but the 'gawk' developers did not wish to
overuse this term.