decodeRow2pairs method

List<ExpandedPair> decodeRow2pairs(
  1. int rowNumber,
  2. BitArray row
)

Implementation

List<ExpandedPair> decodeRow2pairs(int rowNumber, BitArray row) {
  bool done = false;
  while (!done) {
    try {
      _pairs.add(retrieveNextPair(row, _pairs, rowNumber)!);
    } on NotFoundException catch (_) {
      if (_pairs.isEmpty) {
        rethrow;
      }
      // exit this loop when retrieveNextPair() fails and throws
      done = true;
    }
  }

  // TODO: verify sequence of finder patterns as in checkPairSequence()
  if (_checkChecksum()) {
    return _pairs;
  }

  final tryStackedDecode = _rows.isNotEmpty;
  _storeRow(rowNumber); // TODO: deal with reversed rows
  if (tryStackedDecode) {
    // When the image is 180-rotated, then rows are sorted in wrong direction.
    // Try twice with both the directions.
    List<ExpandedPair>? ps = _checkRows(false);
    if (ps != null) {
      return ps;
    }
    ps = _checkRows(true);
    if (ps != null) {
      return ps;
    }
  }

  throw NotFoundException.instance;
}