テンプレート (X ファイル形式、テキスト エンコード)
テンプレートは、データ ストリームの解釈方法を定義します。データはテンプレート定義によって調整されます。 このセクションでは、テンプレートの次の側面について説明し、テンプレートの例を示します。
1 つの特殊なテンプレート (ヘッダー テンプレート) があります。 各アプリケーションでヘッダー テンプレートを定義し、それを使用してバージョン情報などのアプリケーション固有の情報を定義することをお勧めします。 存在する場合、このヘッダーは .x ファイル形式 API によって読み取られます。 flags メンバーが使用可能な場合は、次のデータの解釈方法を決定するために使用されます。 定義されている場合、flags メンバーは 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>。
テンプレート メンバー
テンプレート メンバーは、名前付きデータ型の後に省略可能な名前または名前付きデータ型の配列で構成されます。 有効なプリミティブ データ型は、次の表で定義されています。
Type | サイズ |
---|---|
WORD | 16 ビット |
DWORD | 32 ビット |
FLOAT | IEEE float |
DOUBLE | 64 ビット |
CHAR | 8 ビット |
UCHAR | 8 ビット |
BYTE | 8 ビット |
STRING | NULL で終わる文字列 |
Cstring | 書式設定された C 文字列 (サポートされていません) |
UNICODE | Unicode 文字列 (サポートされていません) |
データ ストリームで前に検出されたテンプレートによって定義された追加のデータ型は、テンプレート定義内で参照することもできます。 前方参照は許可されません。
任意の有効なデータ型は、テンプレート定義で配列として表すことができます。 基本的な構文を次の例に示します。
array <data-type> <name>[<dimension-size>];
<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
}
関連トピック