toBytes method

Uint8List toBytes()

Implementation

Uint8List toBytes() {
  // The format starts with a preamble and the version. See below
  // where all the bytes are stringed together.

  final typeBytes = ascii.encode(type);

  final labelBytes = Uint16List.fromList(label.codeUnits);
  final labelLengthBytes = Uint16List.fromList([labelBytes.lengthInBytes]);

  final timestampBytes =
      Uint64List.fromList([timestamp.millisecondsSinceEpoch]);

  final seriesCountBytes = Uint32List.fromList([series.length]);

  final seriesDataRanges = <Uint8List>[
    for (final s in series) s.toBytes(),
  ];

  final seriesLengthsBytes = Uint64List.fromList([
    for (final range in seriesDataRanges) range.lengthInBytes,
  ]);

  var buffer = _preambleBytes +
      _currentFormatVersionBytes.buffer.asUint8List() +
      typeBytes +
      labelLengthBytes.buffer.asUint8List() +
      labelBytes.buffer.asUint8List() +
      timestampBytes.buffer.asUint8List() +
      seriesCountBytes.buffer.asUint8List() +
      seriesLengthsBytes.buffer.asUint8List();

  for (final range in seriesDataRanges) {
    buffer += range.buffer.asUint8List();
  }

  return Uint8List.fromList(buffer);
}