Шаблоны (формат 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
}
Связанные темы