Sjablonen (X-bestandsindeling, tekstcodering)

Sjablonen definiëren hoe de gegevensstroom wordt geïnterpreteerd. De gegevens worden gemoduleerd door de sjabloondefinitie. In deze sectie worden de volgende aspecten van een sjabloon besproken en wordt een voorbeeldsjabloon weergegeven.

Er is één speciale sjabloon: de koptekstsjabloon. Het wordt aanbevolen dat elke toepassing een headersjabloon definieert en deze gebruikt om toepassingsspecifieke informatie te definiëren, zoals versiegegevens. Indien aanwezig, wordt deze header gelezen door de .x-bestandsindeling-API. Als een vlaglid beschikbaar is, wordt deze gebruikt om te bepalen hoe de volgende gegevens worden geïnterpreteerd. Het vlaglid, indien gedefinieerd, moet een DWORD zijn. Er is momenteel één bit gedefinieerd- bit 0. Als deze bit duidelijk is, zijn de volgende gegevens in het bestand binair. Als deze optie is ingesteld, zijn de volgende gegevens tekst. U kunt meerdere headergegevensobjecten gebruiken om te schakelen tussen binaire en tekst in het bestand.

Sjabloonformulier, naam en UUID

Een sjabloon heeft het volgende formulier.

template <template-name> {
<UUID>
    <member 1>;
...
    <member n>;
[restrictions]
}

De sjabloonnaam is een alfanumerieke naam die het onderstrepingsteken (_) kan bevatten. Het mag niet beginnen met een cijfer. De UUID is een universeel unieke id die is opgemaakt voor de Distributed Computing Environment-standaard van Open Software Foundation en tussen punthaken (<>). Bijvoorbeeld: <3D82AB43-62DA-11cf-AB39-0020AF71E433>.

Sjabloonleden

Sjabloonleden bestaan uit een benoemd gegevenstype, gevolgd door een optionele naam of een matrix van een benoemd gegevenstype. Geldige primitieve gegevenstypen worden gedefinieerd in de volgende tabel.

Type Grootte
WOORD 16 bits
DWORD 32 bits
DRIJVEN IEEE-float
DUBBEL 64 bits
VERKOLEN 8 bits
UCHAR 8 bits
BYTE 8 bits
SNAAR Tekenreeks die is beëindigd met NULL
CSTRING Opgemaakte C-tekenreeks (niet ondersteund)
UNICODE Unicode-tekenreeks (niet ondersteund)

 

Aanvullende gegevenstypen die zijn gedefinieerd door sjablonen die eerder in de gegevensstroom zijn aangetroffen, kunnen ook worden verwezen in een sjabloondefinitie. Er zijn geen doorstuurverwijzingen toegestaan.

Elk geldig gegevenstype kan worden uitgedrukt als een matrix in de sjabloondefinitie. De basissyntaxis wordt weergegeven in het volgende voorbeeld.

array <data-type> <name>[<dimension-size>];

<dimensiegrootte> kan een geheel getal of een benoemde verwijzing naar een ander sjabloonlid zijn waarvan de waarde vervolgens wordt vervangen. Matrices kunnen n-dimensional zijn, waarbij n wordt bepaald door het aantal gekoppelde vierkante haken achter de instructie, zoals in het volgende voorbeeld.

array DWORD FixedHerd[24];
array DWORD Herd[nCows];
array FLOAT Matrix4x4[4][4];

Sjabloonbeperkingen

Sjablonen kunnen worden geopend, gesloten of beperkt. Deze beperkingen bepalen welke gegevenstypen kunnen worden weergegeven in de directe hiërarchie van een gegevensobject dat door de sjabloon is gedefinieerd. Een geopende sjabloon heeft geen beperkingen, een gesloten sjabloon weigert alle gegevenstypen en een beperkte sjabloon staat een benoemde lijst met gegevenstypen toe.

De syntaxis voor het aangeven van een geopende sjabloon is drie punten tussen vierkante haken.

[ ... ]

Een door komma's gescheiden lijst met benoemde gegevenstypen, gevolgd door de UUID's tussen vierkante haken, geeft een beperkte sjabloon aan.

[ { data-type [ UUID ] , } ... ]

Het ontbreken van een van de bovenstaande opties duidt op een gesloten sjabloon.

Voorbeeld van sjabloon

Hieronder ziet u een voorbeeldsjabloon.

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
}

tekstcodering