binary property

Uint8List get binary

Implementation

Uint8List get binary {
  Uint8List b = Uint8List(99420000);
  var bdata = new ByteData.view(b.buffer);
  //first word is lenght, then 4 filler byts
  int wi = 6;

  if (katamari.isEmpty) {
    bdata.setUint8(wi++, capsuleFieldType.empty.index);
  } else {
    bdata.setUint8(wi++, capsuleFieldType.katamari.index);
    bdata.setUint16(wi, katamari.lengthInBytes);
    wi += 2;
    katamari.forEach((element) {
      bdata.setUint8(wi++, element);
    });
  }
  if (threadEntries.isEmpty) {
    bdata.setUint8(wi++, capsuleFieldType.empty.index);
  } else {
    bdata.setUint8(wi++, capsuleFieldType.threadEntries.index);
    bdata.setUint16(wi, threadEntries.lengthInBytes);
    wi += 2;
    threadEntries.forEach((element) {
      bdata.setUint8(wi++, element);
    });
  }
  if (groupEntries.isEmpty) {
    bdata.setUint8(wi++, capsuleFieldType.empty.index);
  } else {
    bdata.setUint8(wi++, capsuleFieldType.groupEntries.index);
    bdata.setUint16(wi, groupEntries.lengthInBytes);
    wi += 2;
    groupEntries.forEach((element) {
      bdata.setUint8(wi++, element);
    });
  }
  if (xxWants.isEmpty) {
    bdata.setUint8(wi++, capsuleFieldType.empty.index);
  } else {
    bdata.setUint8(wi++, capsuleFieldType.xxWant.index);
    bdata.setUint16(wi, xxWants.lengthInBytes);
    wi += 2;
    xxWants.forEach((element) {
      bdata.setUint8(wi++, element);
    });
  }
  if (xxData.isEmpty) {
    bdata.setUint8(wi++, capsuleFieldType.empty.index);
  } else {
    bdata.setUint8(wi++, capsuleFieldType.xxData.index);
    bdata.setUint32(wi, xxData.lengthInBytes);
    wi += 4;
    for (var element in xxData) {
      bdata.setUint8(wi++, element);
    }
  }
  wi += 16; //wiggle room
  bdata.setUint32(0, wi);
  return b.sublist(0, wi);
}