Поделиться через


Шаблоны (формат X-файла, кодировка текста)

Шаблоны определяют, как интерпретируется поток данных— данные модулируются определением шаблона. В этом разделе рассматриваются следующие аспекты шаблона и приведен пример шаблона.

Существует один специальный шаблон — шаблон заголовка. Рекомендуется, чтобы каждое приложение определяло шаблон заголовка и использовало его для определения сведений о конкретных приложениях, таких как сведения о версии. При наличии этот заголовок считывается API формата X-файла. Если элемент flags доступен, он используется для определения того, как интерпретируются следующие данные. Элемент flags, если он определен, должен быть DWORD. В настоящее время определен один бит — бит 0. Если этот бит понятен, следующие данные в файле являются двоичными. Если задано значение , следующие данные являются текстом. Для переключения между двоичными и текстовыми данными в файле можно использовать несколько объектов данных заголовка.

Форма шаблона, имя и UUID

Шаблон имеет следующую форму.

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

Имя шаблона — это буквенно-цифровое имя, которое может содержать символ подчеркивания (_). Она не должна начинаться с цифры. UUID — это универсальный уникальный идентификатор, отформатированный в формате стандарта распределенной вычислительной среды Open Software Foundation и заключенный в угловые скобки (<>). Например: <3D82AB43-62DA-11cf-AB39-0020AF71E433>.

Элементы шаблона

Элементы шаблона состоят из именованного типа данных, за которым следует необязательное имя или массив именованного типа данных. Допустимые примитивные типы данных определены в следующей таблице.

Тип Размер
WORD 16 бит
DWORD 32 бита
FLOAT IEEE float
DOUBLE 64 бита
CHAR 8 бит
UCHAR 8 бит
BYTE 8 бит
STRING Строка, завершающаяся null
CSTRING Отформатированная строка C (не поддерживается)
UNICODE Строка Юникода (не поддерживается)

 

Дополнительные типы данных, определенные шаблонами, встречаемыми ранее в потоке данных, также можно ссылаться в определении шаблона. Пересылка ссылок не допускается.

Любой допустимый тип данных может быть выражен в виде массива в определении шаблона. Базовый синтаксис показан в следующем примере.

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

<Dimension-size> может быть целым числом или именованной ссылкой на другой элемент шаблона, значение которого затем подставляется. Массивы могут быть n-размерными, где n определяется количеством парных квадратных скобок в конечной части оператора, как показано в следующем примере.

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

Ограничения шаблонов

Шаблоны могут быть открытыми, закрытыми или ограниченными. Эти ограничения определяют, какие типы данных могут отображаться в непосредственной иерархии объекта данных, определенного шаблоном. Открытый шаблон не имеет ограничений, закрытый шаблон отклоняет все типы данных, а ограниченный шаблон допускает именованный список типов данных.

Синтаксис для указания открытого шаблона — это три точки, заключенные в квадратные скобки.

[ ... ]

Разделенный запятыми список именованных типов данных, за которыми при необходимости следует их идентификаторы UUID, заключенные в квадратные скобки, указывает на ограниченный шаблон.

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

Отсутствие любого из перечисленных выше данных указывает на закрытый шаблон.

Пример шаблона

Ниже показан пример шаблона.

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
}

Кодировка текста