Partager via


Modèles (format de fichier X, encodage de texte)

Les modèles définissent la façon dont le flux de données est interprété : les données sont modulées par la définition du modèle. Cette section décrit les aspects suivants d’un modèle et fournit un exemple de modèle.

Il existe un modèle spécial : le modèle d’en-tête. Il est recommandé que chaque application définisse un modèle d’en-tête et l’utilise pour définir des informations spécifiques à l’application, telles que les informations de version. S’il est présent, cet en-tête est lu par l’API de format de fichier .x. Si un membre d’indicateurs est disponible, il est utilisé pour déterminer la façon dont les données suivantes sont interprétées. Le membre des indicateurs, s’il est défini, doit être un DWORD. Un bit est actuellement défini : bit 0. Si ce bit est clair, les données suivantes dans le fichier sont binaires. Si elle est définie, les données suivantes sont du texte. Vous pouvez utiliser plusieurs objets de données d’en-tête pour basculer entre le fichier binaire et le texte.

Formulaire, nom et UUID de modèle

Un modèle a le formulaire suivant.

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

Le nom du modèle est un nom alphanumérique qui peut inclure le caractère de soulignement (_). Il ne doit pas commencer par un chiffre. L’UUID est un identificateur universellement unique mis en forme au standard de l’environnement de calcul distribué open Software Foundation et placé entre crochets angle (<>). Par exemple : <3D82AB43-62DA-11cf-AB39-0020AF71E433>.

Membres du modèle

Les membres de modèle se composent d’un type de données nommé suivi d’un nom facultatif ou d’un tableau d’un type de données nommé. Les types de données primitifs valides sont définis dans le tableau suivant.

Type Taille
MOT 16 bits
DWORD 32 bits
FLOTTER FLOAT IEEE
DOUBLE 64 bits
CARBONISER 8 bits
UCHAR 8 bits
OCTET 8 bits
CORDE Chaîne terminée null
CSTRING Chaîne C mise en forme (non prise en charge)
UNICODE Chaîne Unicode (non prise en charge)

 

Des types de données supplémentaires définis par les modèles rencontrés précédemment dans le flux de données peuvent également être référencés dans une définition de modèle. Aucune référence de transfert n’est autorisée.

Tout type de données valide peut être exprimé sous forme de tableau dans la définition du modèle. La syntaxe de base est illustrée dans l’exemple suivant.

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

<taille de dimension> peut être un entier ou une référence nommée à un autre membre de modèle dont la valeur est ensuite remplacée. Les tableaux peuvent être ndimensionnels, où n est déterminé par le nombre de crochets jumelés à la fin de l’instruction, comme dans l’exemple suivant.

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

Restrictions de modèle

Les modèles peuvent être ouverts, fermés ou restreints. Ces restrictions déterminent quels types de données peuvent apparaître dans la hiérarchie immédiate d’un objet de données défini par le modèle. Un modèle ouvert n’a aucune restriction, un modèle fermé rejette tous les types de données et un modèle restreint autorise une liste nommée de types de données.

La syntaxe permettant d’indiquer qu’un modèle ouvert est de trois points entre crochets.

[ ... ]

Une liste séparée par des virgules de types de données nommés suivie éventuellement de leurs UUID placés entre crochets indique un modèle restreint.

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

L’absence de l’un des éléments ci-dessus indique un modèle fermé.

Exemple de modèle

Voici un exemple de modèle.

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
}

d’encodage de texte