Plantillas (formato de archivo X, codificación de texto)

Las plantillas definen cómo se interpreta el flujo de datos: la definición de plantilla modula los datos. En esta sección se describen los siguientes aspectos de una plantilla y se proporciona una plantilla de ejemplo.

Hay una plantilla especial: la plantilla de encabezado. Se recomienda que cada aplicación defina una plantilla de encabezado y úsela para definir información específica de la aplicación, como la información de versión. Si está presente, la API de formato de archivo .x lee este encabezado. Si un miembro de marcas está disponible, se usa para determinar cómo se interpretan los datos siguientes. El miembro flags, si se define, debe ser un DWORD. Actualmente se define un bit: bit 0. Si este bit está claro, los siguientes datos del archivo son binarios. Si se establece, los datos siguientes son texto. Puede usar varios objetos de datos de encabezado para cambiar entre binarios y texto dentro del archivo.

Formulario de plantilla, nombre e UUID

Una plantilla tiene el siguiente formato.

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

El nombre de la plantilla es un nombre alfanumérico que puede incluir el carácter de subrayado (_). No debe comenzar con un dígito. El UUID es un identificador único universalmente con formato para el estándar Entorno de computación distribuida de Open Software Foundation y entre corchetes angulares (<>). Por ejemplo: <3D82AB43-62DA-11cf-AB39-0020AF71E433>.

Miembros de plantilla

Los miembros de plantilla constan de un tipo de datos con nombre seguido de un nombre opcional o una matriz de un tipo de datos con nombre. Los tipos de datos primitivos válidos se definen en la tabla siguiente.

Tipo Tamaño
PALABRA 16 bits
DWORD 32 bits
FLOTAR IEEE float
DOBLE 64 bits
CARBONIZAR 8 bits
UCHAR 8 bits
BYTE 8 bits
CUERDA Cadena terminada en NULL
CSTRING Cadena de C con formato (no compatible)
UNICODE Cadena Unicode (no compatible)

 

También se puede hacer referencia a otros tipos de datos definidos por plantillas que se encontraron anteriormente en el flujo de datos dentro de una definición de plantilla. No se permiten referencias reenviadas.

Cualquier tipo de datos válido se puede expresar como una matriz en la definición de plantilla. La sintaxis básica se muestra en el ejemplo siguiente.

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

<tamaño de dimensión> puede ser un entero o una referencia con nombre a otro miembro de plantilla cuyo valor se sustituye. Las matrices pueden ser n dimensionales, donde n viene determinada por el número de corchetes emparejados que siguen a la instrucción, como en el ejemplo siguiente.

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

Restricciones de plantilla

Las plantillas se pueden abrir, cerrar o restringir. Estas restricciones determinan qué tipos de datos pueden aparecer en la jerarquía inmediata de un objeto de datos definido por la plantilla. Una plantilla abierta no tiene restricciones, una plantilla cerrada rechaza todos los tipos de datos y una plantilla restringida permite una lista con nombre de tipos de datos.

La sintaxis para indicar una plantilla abierta es de tres puntos entre corchetes.

[ ... ]

Una lista separada por comas de tipos de datos con nombre seguido opcionalmente por sus UUID entre corchetes indica una plantilla restringida.

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

La ausencia de cualquiera de las opciones anteriores indica una plantilla cerrada.

Ejemplo de plantilla

A continuación se muestra una plantilla de ejemplo.

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
}

codificación de texto