toBytes method

Uint8List toBytes()

Serialize to a single blob (for an asset, a cache file, or a message to another isolate).

Implementation

Uint8List toBytes() {
  final entryBytes = utf8.encode(entry);
  var length = 4 + 4 + 4 + entryBytes.length + 4;
  final names = <List<int>>[];
  for (final name in modules.keys) {
    final nameBytes = utf8.encode(name);
    names.add(nameBytes);
    length += 4 + nameBytes.length + 4 + modules[name]!.length;
  }
  final out = Uint8List(length);
  final view = ByteData.view(out.buffer);
  var offset = 0;
  void putUint32(int value) {
    view.setUint32(offset, value, Endian.little);
    offset += 4;
  }

  void putBytes(List<int> bytes) {
    out.setRange(offset, offset + bytes.length, bytes);
    offset += bytes.length;
  }

  putUint32(_magic);
  putUint32(_formatVersion);
  putUint32(entryBytes.length);
  putBytes(entryBytes);
  putUint32(modules.length);
  var i = 0;
  for (final bytecode in modules.values) {
    putUint32(names[i].length);
    putBytes(names[i]);
    putUint32(bytecode.length);
    putBytes(bytecode);
    i++;
  }
  return out;
}