Modelos (formato de arquivo X, codificação de texto)
Os modelos definem como o fluxo de dados é interpretado - os dados são modulados pela definição do modelo. Esta seção discute os seguintes aspetos de um modelo e fornece um modelo de exemplo.
Há um modelo especial - o modelo de cabeçalho. É recomendável que cada aplicativo defina um modelo de cabeçalho e use-o para definir informações específicas do aplicativo, como informações de versão. Se estiver presente, esse cabeçalho será lido pela API de formato de arquivo .x. Se um membro de sinalizadores estiver disponível, ele será usado para determinar como os dados a seguir serão interpretados. O membro flags, se definido, deve ser um DWORD. Um bit está atualmente definido - bit 0. Se esse bit estiver claro, os seguintes dados no arquivo serão binários. Se definido, os dados a seguir são texto. Você pode usar vários objetos de dados de cabeçalho para alternar entre binário e texto dentro do arquivo.
Formulário de modelo, nome e UUID
Um modelo tem o seguinte formulário.
template <template-name> {
<UUID>
<member 1>;
...
<member n>;
[restrictions]
}
O nome do modelo é um nome alfanumérico que pode incluir o caractere de sublinhado (_). Não deve começar com um dígito. O UUID é um identificador universalmente único formatado de acordo com o padrão de Ambiente de Computação Distribuída da Open Software Foundation e delimitado por colchetes angulares (<>). Por exemplo: <3D82AB43-62DA-11cf-AB39-0020AF71E433>.
Membros do modelo
Os membros do modelo consistem em um tipo de dados nomeado seguido por um nome opcional ou uma matriz de um tipo de dados nomeado. Os tipos de dados primitivos válidos são definidos na tabela a seguir.
Tipo | Tamanho |
---|---|
PALAVRA | 16 bits |
DWORD | 32 bits |
FLUTUAR | Flutuador IEEE |
DUPLO | 64 bits |
CHAR | 8 bits |
UCHAR | 8 bits |
BYTE | 8 bits |
STRING | Cadeia de caracteres terminada NULL |
CSTRING | String C formatada (não suportada) |
UNICODE | Cadeia de caracteres Unicode (não suportada) |
Tipos de dados adicionais definidos por modelos encontrados anteriormente no fluxo de dados também podem ser referenciados dentro de uma definição de modelo. Não são permitidas referências de encaminhamento.
Qualquer tipo de dados válido pode ser expresso como uma matriz na definição do modelo. A sintaxe básica é mostrada no exemplo a seguir.
array <data-type> <name>[<dimension-size>];
< > de tamanho de dimensão pode ser um inteiro ou uma referência nomeada para outro membro do modelo cujo valor é então substituído. As matrizes podem ser n-dimensionais, onde n é determinado pelo número de colchetes emparelhados à direita da instrução, como no exemplo a seguir.
array DWORD FixedHerd[24];
array DWORD Herd[nCows];
array FLOAT Matrix4x4[4][4];
Restrições de modelo
Os modelos podem ser abertos, fechados ou restritos. Essas restrições determinam quais tipos de dados podem aparecer na hierarquia imediata de um objeto de dados definido pelo modelo. Um modelo aberto não tem restrições, um modelo fechado rejeita todos os tipos de dados e um modelo restrito permite uma lista nomeada de tipos de dados.
A sintaxe para indicar um modelo aberto é de três períodos entre colchetes.
[ ... ]
Uma lista separada por vírgulas de tipos de dados nomeados seguida opcionalmente por seus UUIDs entre colchetes indica um modelo restrito.
[ { data-type [ UUID ] , } ... ]
A ausência de qualquer um dos itens acima indica um modelo fechado.
Exemplo de modelo
A seguir mostra um modelo de exemplo.
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
}
Tópicos relacionados