deserialize method

  1. @override
void deserialize(
  1. FsharpExternalScannerState state,
  2. Uint8List data
)
override

Implementation

@override
void deserialize(FsharpExternalScannerState state, Uint8List data) {
  state.runback.clear();
  state.indentLengthStack
    ..clear()
    ..add(0);
  if (data.isEmpty) return;

  var position = 0;
  final runbackCount = data[position++];
  final availableRunback = (data.length - position).clamp(0, runbackCount);
  state.runback.addAll(data.sublist(position, position + availableRunback));
  position += availableRunback;
  if (availableRunback != runbackCount || position >= data.length) return;

  final indentLengthSize = data[position++];
  final availableIndentLength = (data.length - position).clamp(
    0,
    indentLengthSize,
  );
  if (availableIndentLength > 0) {
    final bytes = ByteData(_serializedIndentLengthSize)
      ..setUint32(0, state.indentLength & 0xffffffff, Endian.host);
    final target = bytes.buffer.asUint8List();
    final copiedLength = availableIndentLength.clamp(
      0,
      _serializedIndentLengthSize,
    );
    target.setRange(0, copiedLength, data, position);
    state.indentLength = bytes.getUint32(0, Endian.host);
  }
  position += availableIndentLength;
  if (availableIndentLength != indentLengthSize) return;

  while (position < data.length) {
    state.indentLengthStack.add(data[position++]);
  }
}