Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
I modelli definiscono la modalità di interpretazione del flusso di dati: i dati vengono modulati dalla definizione del modello. In questa sezione vengono illustrati gli aspetti seguenti di un modello e viene fornito un modello di esempio.
Esiste un modello speciale, ovvero il modello di intestazione. È consigliabile che ogni applicazione definisci un modello di intestazione e la usi per definire informazioni specifiche dell'applicazione, ad esempio informazioni sulla versione. Se presente, questa intestazione viene letta dall'API con formato di file x. Se un membro flags è disponibile, viene usato per determinare come vengono interpretati i dati seguenti. Il membro flags, se definito, deve essere un DWORD. Un bit è attualmente definito: bit 0. Se questo bit è chiaro, i dati seguenti nel file sono binari. Se impostata, i dati seguenti sono testo. È possibile usare più oggetti dati di intestazione per passare dal file binario al testo all'interno del file.
Modulo modello, Nome e UUID
Un modello ha il formato seguente.
template <template-name> {
<UUID>
<member 1>;
...
<member n>;
[restrictions]
}
Il nome del modello è un nome alfanumerico che può includere il carattere di sottolineatura (_). Non deve iniziare con una cifra. L'UUID è un identificatore univoco universalmente formattato allo standard Distributed Computing Environment di Open Software Foundation e racchiuso tra parentesi angolari (<>). Ad esempio: <3D82AB43-62DA-11cf-AB39-0020AF71E433>.
Membri modello
I membri del modello sono costituiti da un tipo di dati denominato seguito da un nome facoltativo o da una matrice di un tipo di dati denominato. Nella tabella seguente sono definiti tipi di dati primitivi validi.
Digitare | Grandezza |
---|---|
PAROLA | 16 bit |
DWORD | 32 bit |
GALLEGGIARE | IEEE float |
DOPPIO | 64 bit |
CHAR | 8 bit |
UCHAR | 8 bit |
BYTE | 8 bit |
CORDA | Stringa con terminazione NULL |
CSTRING | Stringa C formattata (non supportata) |
UNICODE | Stringa Unicode (non supportata) |
È anche possibile fare riferimento a tipi di dati aggiuntivi definiti dai modelli rilevati in precedenza nel flusso di dati all'interno di una definizione di modello. Non sono consentiti riferimenti in avanti.
Qualsiasi tipo di dati valido può essere espresso come matrice nella definizione del modello. La sintassi di base è illustrata nell'esempio seguente.
array <data-type> <name>[<dimension-size>];
<dimensione> può essere un numero intero o un riferimento denominato a un altro membro del modello il cui valore viene sostituito. Le matrici possono essere n-dimensionali, dove n è determinato dal numero di parentesi quadre abbinate finali dell'istruzione, come nell'esempio seguente.
array DWORD FixedHerd[24];
array DWORD Herd[nCows];
array FLOAT Matrix4x4[4][4];
Restrizioni dei modelli
I modelli possono essere aperti, chiusi o limitati. Queste restrizioni determinano quali tipi di dati possono essere visualizzati nella gerarchia immediata di un oggetto dati definito dal modello. Un modello aperto non ha restrizioni, un modello chiuso rifiuta tutti i tipi di dati e un modello con restrizioni consente un elenco denominato di tipi di dati.
La sintassi per indicare un modello aperto è costituito da tre punti racchiusi tra parentesi quadre.
[ ... ]
Un elenco delimitato da virgole di tipi di dati denominati seguito facoltativamente dai relativi UUID racchiusi tra parentesi quadre indica un modello con restrizioni.
[ { data-type [ UUID ] , } ... ]
L'assenza di una delle opzioni precedenti indica un modello chiuso.
Esempio di modello
Di seguito viene illustrato un modello di esempio.
template Mesh {
<3D82AB44-62DA-11cf-AB39-0020AF71E433>
DWORD nVertices;
array Vector vertices[nVertices];
DWORD nFaces;
array MeshFace faces[nFaces];
[ ... ] // An open template
}
template Vector {
<3D82AB5E-62DA-11cf-AB39-0020AF71E433>
FLOAT x;
FLOAT y;
FLOAT z;
} // A closed template
template FileSystem {
<UUID>
STRING name;
[ Directory <UUID>, File <UUID> ] // A restricted template
}
Argomenti correlati