draco/docs/spec/metadata.decoder.md
2017-10-27 10:24:30 -07:00

1.9 KiB

Metadata Decoder

DecodeMetadata()

void DecodeMetadata() {
  ParseMetadataCount();
  for (i = 0; i < num_att_metadata; ++i) {
    ParseAttributeMetadataId(i);
    DecodeMetadataElement(att_metadata[i]);
  }
  DecodeMetadataElement(file_metadata);
}

{:.draco-syntax}

ParseMetadataCount()

void ParseMetadataCount() {
  num_att_metadata                                                                    varUI32
}

{:.draco-syntax}

ParseAttributeMetadataId()

void ParseAttributeMetadataId(index) {
  att_metadata_id[index]                                                              varUI32
}

{:.draco-syntax}

ParseMetadataElement()

void ParseMetadataElement(metadata) {
  metadata.num_entries                                                                varUI32
  for (i = 0; i < metadata.num_entries; ++i) {
    sz = metadata.key_size[i]                                                         UI8
    metadata.key[i]                                                                   I8[sz]
    sz = metadata.value_size[i]                                                       UI8
    metadata.value[i]                                                                 I8[sz]
  }
  metadata.num_sub_metadata                                                           varUI32
}

{:.draco-syntax}

ParseSubMetadataKey()

void ParseSubMetadataKey(metadata, index) {
  sz = metadata.sub_metadata_key_size[index]                                          UI8
  metadata.sub_metadata_key[index]                                                    I8[sz]
}

{:.draco-syntax}

DecodeMetadataElement()

void DecodeMetadataElement(metadata) {
  ParseMetadataElement(metadata);
  for (i = 0; i < metadata.num_sub_metadata; ++i) {
    ParseSubMetadataKey(metadata, i);
    DecodeMetadataElement(metadata.sub_metadata[i]);
  }
}

{:.draco-syntax}