packPartial function

void packPartial(
  1. Iterable<int> input,
  2. int base,
  3. int mask,
  4. int outputBlockLength,
  5. List<int> out,
  6. int outStart, {
  7. int? padding,
})

Implementation

void packPartial(Iterable<int> input, int base, int mask, int outputBlockLength,
    List<int> out, int outStart,
    {int? padding}) {
  int v = 0;
  for (int byte in input) {
    v <<= 8;
    v |= byte;
  }

  int inputBitLength = input.length * 8;
  int dataCount = (inputBitLength / base).ceil();
  int outputBitCount = dataCount * base;
  int correction = outputBitCount - inputBitLength;
  v = v << correction;
  for (int i = 0; i < dataCount; i++) {
    int j = dataCount - 1 - i;
    out[outStart++] = (v >> j * base) & mask;
  }
  if (padding != null) {
    for (int i = dataCount; i < outputBlockLength; i++) {
      out[outStart++] = padding;
    }
  }
}