encode method

  1. @override
void encode(
  1. BigInt data,
  2. LengthTrackingByteSink buffer
)
override

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);
}