Udostępnij za pośrednictwem


Szablony (format pliku X, kodowanie tekstu)

Szablony definiują sposób interpretowania strumienia danych — dane są modulowane przez definicję szablonu. W tej sekcji omówiono następujące aspekty szablonu i przedstawiono przykładowy szablon.

Istnieje jeden specjalny szablon — szablon nagłówka. Zaleca się, aby każda aplikacja zdefiniowała szablon nagłówka i używała go do definiowania informacji specyficznych dla aplikacji, takich jak informacje o wersji. Jeśli ten nagłówek jest obecny, jest odczytywany przez interfejs API formatu pliku x. Jeśli element członkowski flag jest dostępny, służy do określania sposobu interpretowania następujących danych. Element członkowski flag, jeśli został zdefiniowany, powinien być DWORD. Obecnie zdefiniowano jeden bit — bit 0. Jeśli ten bit jest jasny, następujące dane w pliku są binarne. W przypadku ustawienia następujące dane są tekstem. Możesz użyć wielu obiektów danych nagłówka, aby przełączać się między plikiem binarnym a tekstem w pliku.

Formularz szablonu, nazwa i identyfikator UUID

Szablon ma następujący formularz.

template <template-name> {
<UUID>
    <member 1>;
...
    <member n>;
[restrictions]
}

Nazwa szablonu to alfanumeryczna nazwa, która może zawierać znak podkreślenia (_). Nie może zaczynać się od cyfry. UUID jest uniwersalnym unikatowym identyfikatorem sformatowanym w standardzie Open Software Foundation Distributed Computing Environment i ujętą w nawiasy kątowe (<>). Na przykład: <3D82AB43-62DA-11cf-AB39-0020AF71E433>.

Elementy członkowskie szablonu

Elementy członkowskie szablonu składają się z nazwanego typu danych, po którym następuje opcjonalna nazwa lub tablica nazwanego typu danych. Prawidłowe typy danych pierwotnych są zdefiniowane w poniższej tabeli.

Typ Rozmiar
SŁOWO 16 bitów
DWORD 32 bity
SPŁAWIK Liczba zmiennoprzecinkowa IEEE
PODWÓJNY 64-bitowe
CHAR 8 bitów
UCHAR 8 bitów
BAJT 8 bitów
STRUNA Ciąg zakończony o wartości NULL
CSTRING Sformatowany ciąg języka C (nieobsługiwany)
UNICODE Ciąg Unicode (nieobsługiwany)

 

Dodatkowe typy danych zdefiniowane przez szablony napotkane wcześniej w strumieniu danych mogą być również przywoływane w definicji szablonu. Odwołania do przodu nie są dozwolone.

Dowolny prawidłowy typ danych można wyrazić jako tablicę w definicji szablonu. Podstawowa składnia jest pokazana w poniższym przykładzie.

array <data-type> <name>[<dimension-size>];

<rozmiar wymiaru> może być liczbą całkowitą lub nazwanym odwołaniem do innego elementu członkowskiego szablonu, którego wartość jest następnie zastępowana. Tablice mogą być n-wymiarowe, gdzie n jest określany przez liczbę sparowanych nawiasów kwadratowych kończących instrukcję, jak w poniższym przykładzie.

array DWORD FixedHerd[24];
array DWORD Herd[nCows];
array FLOAT Matrix4x4[4][4];

Ograniczenia szablonu

Szablony można otwierać, zamykać lub ograniczać. Te ograniczenia określają, które typy danych mogą występować w bezpośredniej hierarchii obiektu danych zdefiniowanego przez szablon. Otwarty szablon nie ma żadnych ograniczeń, zamknięty szablon odrzuca wszystkie typy danych, a szablon z ograniczeniami umożliwia nazwaną listę typów danych.

Składnia wskazująca otwarty szablon to trzy kropki ujęte w nawiasy kwadratowe.

[ ... ]

Rozdzielona przecinkami lista nazwanych typów danych, po której opcjonalnie znajdują się identyfikatory UUID ujęte w nawiasy kwadratowe, wskazują szablon z ograniczeniami.

[ { data-type [ UUID ] , } ... ]

Brak jednego z powyższych elementów wskazuje zamknięty szablon.

Przykład szablonu

Poniżej przedstawiono przykładowy szablon.

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
}

kodowanie tekstu