テンプレートは、データ ストリームの解釈方法を定義します。データはテンプレート定義によって調整されます。 このセクションでは、テンプレートの次の側面について説明し、テンプレートの例を示します。
1 つの特殊なテンプレート (ヘッダー テンプレート) があります。 各アプリケーションでヘッダー テンプレートを定義し、それを使用してバージョン情報などのアプリケーション固有の情報を定義することをお勧めします。 存在する場合、このヘッダーは .x ファイル形式 API によって読み取られます。 フラグ メンバーを使用できる場合は、次のデータの解釈方法を決定するために使用されます。 定義されている場合、フラグ メンバーは DWORD である必要があります。 1 ビットが現在定義されている - ビット 0。 このビットが明確な場合、ファイル内の次のデータはバイナリです。 設定した場合、次のデータはテキストです。 複数のヘッダー データ オブジェクトを使用して、ファイル内のバイナリとテキストを切り替えることができます。
テンプレート フォーム、名前、UUID
テンプレートには次の形式があります。
template <template-name> {
<UUID>
<member 1>;
...
<member n>;
[restrictions]
}
テンプレート名は、アンダースコア文字 (_) を含めることができる英数字の名前です。 数字で始めてはなりません。 UUID は、Open Software Foundation の Distributed Computing Environment 標準に書式設定され、山かっこ (<>) で囲まれた、汎用の一意識別子です。 例: <3D82AB43-62DA-11cf-AB39-0020AF71E433>。
Template メンバー
テンプレート メンバーは、名前付きデータ型の後に省略可能な名前または名前付きデータ型の配列で構成されます。 有効なプリミティブ データ型は、次の表で定義されています。
| 種類 | 大きさ |
|---|---|
| 言葉 | 16 ビット |
| DWORD | 32 ビット |
| 浮く | IEEE float |
| 複 | 64 ビット |
| 焦がす | 8 ビット |
| UCHAR | 8 ビット |
| バイト | 8 ビット |
| 糸 | NULL で終わる文字列 |
| CSTRING | 書式設定された C 文字列 (サポートされていません) |
| UNICODE | Unicode 文字列 (サポートされていません) |
データ ストリームで前に検出されたテンプレートによって定義された追加のデータ型は、テンプレート定義内で参照することもできます。 前方参照は許可されません。
任意の有効なデータ型をテンプレート定義の配列として表すことができます。 基本的な構文を次の例に示します。
array <data-type> <name>[<dimension-size>];
<ディメンション サイズの> には、整数または値が置き換えられる別のテンプレート メンバーへの名前付き参照を指定できます。 配列には n 次元を指定できます。n は、次の例のように、ステートメントの末尾にあるペアの角かっこの数によって決まります。
array DWORD FixedHerd[24];
array DWORD Herd[nCows];
array FLOAT Matrix4x4[4][4];
テンプレートの制限事項
テンプレートは、開く、閉じる、または制限できます。 これらの制限により、テンプレートによって定義されたデータ オブジェクトの即時階層に表示できるデータ型が決まります。 開いているテンプレートには制限がなく、閉じたテンプレートはすべてのデータ型を拒否し、制限付きテンプレートではデータ型の名前付きリストを使用できます。
開いているテンプレートを示す構文は、角かっこで囲まれた 3 つのピリオドです。
[ ... ]
名前付きデータ型のコンマ区切りのリストの後に必要に応じて、角かっこで囲まれた 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
}
関連トピック