Result RSS14Reader::decodeRow(int rowNumber, const BitArray& row_, std::unique_ptr<DecodingState>& state) const { RSS14DecodingState* prevState = nullptr; if (state == nullptr) { state.reset(prevState = new RSS14DecodingState); } else { #if !defined(ZX_HAVE_CONFIG) #error "You need to include ZXConfig.h" #elif !defined(ZX_NO_RTTI) prevState = dynamic_cast<RSS14DecodingState*>(state.get()); #else prevState = static_cast<RSS14DecodingState*>(state.get()); #endif } if (prevState == nullptr) { throw std::runtime_error("Invalid state"); } BitArray row = row_.copy(); AddOrTally(prevState->possibleLeftPairs, DecodePair(row, false, rowNumber)); row.reverse(); AddOrTally(prevState->possibleRightPairs, DecodePair(row, true, rowNumber)); // row.reverse(); for (const auto& left : prevState->possibleLeftPairs) { if (left.count() > 1) { for (const auto& right : prevState->possibleRightPairs) { if (right.count() > 1) { if (CheckChecksum(left, right)) { return ConstructResult(left, right); } } } } } return Result(DecodeStatus::NotFound); }