tzdbSerialize function

List<int> tzdbSerialize(
  1. LocationDatabase db
)

Serialize TimeZone Database

Implementation

List<int> tzdbSerialize(LocationDatabase db) {
  final locationsInBytes = <List<int>>[];
  var bufferLength = 0;

  for (final l in db.locations.values.toList()
    ..sort((l, r) => l.name.compareTo(r.name))) {
    List<int> b = _serializeLocation(l);
    locationsInBytes.add(b);
    bufferLength += 8 + b.length;
    bufferLength = _align(bufferLength, 8);
  }

  final r = Uint8List(bufferLength);
  final rb = r.buffer.asByteData();

  var offset = 0;
  for (final b in locationsInBytes) {
    var length = _align(b.length, 8);
    rb.setUint32(offset, length);
    r.setAll(offset + 8, b);
    offset += 8 + length;
  }

  return r;
}