템플릿(X 파일 형식, 텍스트 인코딩)
템플릿은 데이터 스트림을 해석하는 방법을 정의합니다. 데이터는 템플릿 정의에 의해 변조됩니다. 이 섹션에서는 템플릿의 다음 측면에 대해 설명하고 예제 템플릿을 제공합니다.
헤더 템플릿이라는 하나의 특수 템플릿이 있습니다. 각 애플리케이션은 헤더 템플릿을 정의하고 이를 사용하여 버전 정보와 같은 애플리케이션 관련 정보를 정의하는 것이 좋습니다. 있는 경우 이 헤더는 .x 파일 형식 API로 읽습니다. 플래그 멤버를 사용할 수 있는 경우 다음 데이터를 해석하는 방법을 결정하는 데 사용됩니다. 플래그 멤버(정의된 경우)는 DWORD여야 합니다. 현재 1비트(비트 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>];
<차원 크기> 는 정수이거나 값이 대체되는 다른 템플릿 멤버에 대한 명명된 참조일 수 있습니다. 배열은 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
}
관련 항목