テンプレート (X ファイル形式、テキスト エンコード)

テンプレートは、データ ストリームの解釈方法を定義します。データはテンプレート定義によって調整されます。 このセクションでは、テンプレートの次の側面について説明し、テンプレートの例を示します。

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
}

テキスト エンコード