다음을 통해 공유


템플릿(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
}

텍스트 인코딩