deserialize method
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++]);
}
}