recordPattern static method

void recordPattern(
  1. UBitArray row,
  2. int start,
  3. Int32List counters
)

Fills counters with alternating run lengths starting at start.

Implementation

static void recordPattern(UBitArray row, int start, Int32List counters) {
  final int numCounters = counters.length;
  counters.fillRange(0, numCounters, 0);
  final int end = row.size;
  if (start >= end) throw const UCodeDecodeException("Pattern start out of range");
  bool isWhite = !row.get(start);
  int counterPosition = 0;
  int i = start;
  while (i < end) {
    if (row.get(i) != isWhite) {
      counters[counterPosition]++;
    } else {
      counterPosition++;
      if (counterPosition == numCounters) break;
      counters[counterPosition] = 1;
      isWhite = !isWhite;
    }
    i++;
  }
  if (!(counterPosition == numCounters || (counterPosition == numCounters - 1 && i == end))) {
    throw const UCodeDecodeException("Truncated pattern");
  }
}