Mallar (X-filformat, textkodning)

Mallar definierar hur dataströmmen tolkas – data moduleras av malldefinitionen. I det här avsnittet beskrivs följande aspekter av en mall och en exempelmall.

Det finns en särskild mall – rubrikmallen. Vi rekommenderar att varje program definierar en rubrikmall och använder den för att definiera programspecifik information, till exempel versionsinformation. Om den finns läss den här rubriken av .x-filformats-API:et. Om en flaggmedlem är tillgänglig används den för att avgöra hur följande data tolkas. Flaggans medlem, om den definieras, ska vara en DWORD. En bit är för närvarande definierad – bit 0. Om den här biten är tydlig är följande data i filen binära. Om det anges är följande data text. Du kan använda flera huvuddataobjekt för att växla mellan binärt objekt och text i filen.

Mallformulär, namn och UUID

En mall har följande formulär.

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

Mallnamnet är ett alfanumeriskt namn som kan innehålla understreckstecknet (_). Den får inte börja med en siffra. UUID är en universellt unik identifierare som är formaterad efter Open Software Foundations standard för distribuerad databehandlingsmiljö och omges av vinkelparenteser (<>). Exempel: <3D82AB43-62DA-11cf-AB39-0020AF71E433>.

Mallmedlemmar

Mallmedlemmar består av en namngiven datatyp följt av ett valfritt namn eller en matris med en namngiven datatyp. Giltiga primitiva datatyper definieras i följande tabell.

Typ Storlek
ORD 16 bitar
DWORD 32 bitar
FLYTA IEEE-flyttal
DUBBEL 64 bitar
RÖDING 8 bitar
UCHAR 8 bitar
BYTE 8 bitar
STRÄNG NULL-avslutad sträng
CSTRING Formaterad C-sträng (stöds inte)
UNICODE Unicode-sträng (stöds inte)

 

Ytterligare datatyper som definieras av mallar som påträffades tidigare i dataströmmen kan också refereras i en malldefinition. Inga framåtriktade referenser tillåts.

Alla giltiga datatyper kan uttryckas som en matris i malldefinitionen. Den grundläggande syntaxen visas i följande exempel.

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

< > kan vara ett heltal eller en namngiven referens till en annan mallmedlem vars värde sedan ersätts. Matriser kan vara n-dimensionella, där n bestäms av antalet parkopplade hakparenteser som följer instruktionen, som i följande exempel.

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

Mallbegränsningar

Mallar kan vara öppna, stängda eller begränsade. Dessa begränsningar avgör vilka datatyper som kan visas i den omedelbara hierarkin för ett dataobjekt som definieras av mallen. En öppen mall har inga begränsningar, en stängd mall avvisar alla datatyper och en begränsad mall tillåter en namngiven lista med datatyper.

Syntaxen för att ange en öppen mall är tre punkter som omges av hakparenteser.

[ ... ]

En kommaavgränsad lista över namngivna datatyper följt av deras UUID:er som omges av hakparenteser anger en begränsad mall.

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

Avsaknaden av något av ovanstående anger en stängd mall.

Mallexempel

Följande visar en exempelmall.

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
}

textkodning