Successivo: Funzioni per i vettori, Su: Manipolazione di vettori [Contenuti][Indice]
I tipi di dato associati con i vettori sono i seguenti:
typedef void *awk_array_t;
Se si richiede il valore di una variabile contenuta in un vettore, si ottiene
un valore del tipo awk_array_t
. Questo valore è
opaco114 per l’estensione; identifica in maniera univoca il
vettore ma può solo essere usato come parametro di una funzione dell’API,
o essere ricevuto da una funzione dell’API. Questo è molto simile al modo
in cui i valori ‘FILE *’ sono usati con le routine di libreria di
<stdio.h>
.
typedef struct awk_element {
/* puntatore di servizio
a lista collegata, non usato da gawk */
struct awk_element *next;
enum {
AWK_ELEMENT_DEFAULT = 0, /* impostato da gawk */
AWK_ELEMENT_DELETE = 1 /* impostato dall'estensione */
} flags;
awk_value_t index;
awk_value_t value;
} awk_element_t;
awk_element_t
è un elemento di vettore “appiattito”.
awk
produce un vettore di questo tipo all’interno della struttura
awk_flat_array_t
(si veda poco più avanti).
Singoli elementi di vettore possono essere marcati per essere cancellati.
Nuovi elementi del vettore devono essere aggiunti individualmente, uno per
volta, usando una funzione API apposita. I campi sono i seguenti:
struct awk_element *next;
Questo puntatore è presente come ausilio a chi scrive un’estensione. Permette a un’estensione di creare una lista collegata (linked list) di nuovi elementi che possono essere aggiunti a un vettore con un singolo ciclo che percorre tutta la lista.
enum { … } flags;
Un insieme di valori di flag che passano informazione tra l’estensione
e gawk
. Per ora c’è solo un flag disponibile:
AWK_ELEMENT_DELETE
.
Se lo si imposta, gawk
elimina l’elemento in questione dal vettore
originale, dopo che il vettore “appiattito” è stato rilasciato.
index
value
L’indice e il valore di un elemento, rispettivamente.
Tutta la memoria puntata da index
e valore
appartiene
a gawk
.
typedef struct awk_flat_array {
awk_const void *awk_const opaque1; /* per uso di gawk */
awk_const void *awk_const opaque2; /* per uso di gawk */
awk_const size_t count; /* quanti elementi nel vettore */
awk_element_t elements[1]; /* saranno ``appiattiti'' */
} awk_flat_array_t;
Questo è un vettore appiattito. Quando un’estensione ottiene da
gawk
questa struttura, il vettore elements
ha una dimensione
reale di count
elementi.
I puntatori opaque1
e opaque2
sono per uso di gawk
;
come tali, sono marcati come awk_const
in modo che l’estensione non
possa modificarli.
È anche un
“cookie,” ma gli sviluppatori di gawk
hanno preferito non abusare
di questo termine.
Successivo: Funzioni per i vettori, Su: Manipolazione di vettori [Contenuti][Indice]