encode method
Writes data
into the buffer
.
Implementation
@override
void encode(BigInt data, LengthTrackingByteSink buffer) {
final negative = data.isNegative;
Uint8List bytesData;
if (negative) {
// twos complement
bytesData = unsignedIntToBytes((BigInt.one << length) + data);
} else {
bytesData = unsignedIntToBytes(data);
}
final padLen = calculatePadLength(bytesData.length);
// signed expansion: use 0b11111111 when negative, 0 otherwise
if (negative) {
buffer.add(List.filled(padLen, 0xFF));
} else {
buffer.add(Uint8List(padLen)); // will be filled with zeroes
}
buffer.add(bytesData);
}