encodeIdToIndices function

List<int> encodeIdToIndices(
  1. BigInt participantId,
  2. int bitCount,
  3. EncodingConfig config
)

Implementation

List<int> encodeIdToIndices(
  BigInt participantId,
  int bitCount,
  EncodingConfig config,
) {
  if (participantId < BigInt.zero ||
      participantId >= (BigInt.one << bitCount)) {
    throw ArgumentError('ID must fit within $bitCount bits');
  }

  final numWords = config.wordsNeeded(bitCount);
  final mask = (1 << config.bitsPerWord) - 1;
  final indices = <int>[];

  BigInt remaining = participantId;
  for (int i = 0; i < numWords; i++) {
    final index = (remaining & BigInt.from(mask)).toInt();
    indices.insert(0, index);
    remaining = remaining >> config.bitsPerWord;
  }

  return indices;
}