encode method

Uint8List encode()

Serializes the manifest.

Implementation

Uint8List encode() {
  var size = 12;
  for (final segment in segments) {
    size += segment.encodedSize;
  }
  size += 4; // checksum
  final out = Uint8List(size);
  out[0] = manifestMagic;
  out[1] = manifestVersion;
  VxsLe.w16(out, 2, 0);
  VxsLe.w32(out, 4, generation);
  VxsLe.w32(out, 8, segments.length);
  var pos = 12;
  for (final segment in segments) {
    VxsLe.w16(out, pos, segment.name.length);
    pos += 2;
    final nameBytes = segment.name.codeUnits;
    out.setRange(pos, pos + nameBytes.length, nameBytes);
    pos += nameBytes.length;
    VxsLe.w32(out, pos, segment.entryCount);
    pos += 4;
    VxsLe.w32(out, pos, segment.byteLength);
    pos += 4;
  }
  VxsLe.w32(out, pos, VxsCrc32c.compute(out, 0, pos));
  return out;
}