static RSS::FinderPattern ParseFoundFinderPattern(const BitArray& row, int rowNumber, bool right, BitArray::Range range, FinderCounters& finderCounters) { if (!range || range.begin == row.begin()) return {}; // Actually we found elements 2-5 -> Locate element 1 auto i = std::find(BitArray::ReverseIterator(range.begin), row.rend(), *range.begin); int firstCounter = range.begin - i.base(); range.begin = i.base(); // Make 'counters' hold 1-4 std::copy_backward(finderCounters.begin(), finderCounters.end() - 1, finderCounters.end()); finderCounters[0] = firstCounter; int value = RSS::ReaderHelper::ParseFinderValue(finderCounters, FINDER_PATTERNS); if (value < 0) return {}; int start = range.begin - row.begin(); int end = range.end - row.begin(); if (right) { // row is actually reversed start = row.size() - 1 - start; end = row.size() - 1 - end; } return {value, range.begin - row.begin(), range.end - row.begin(), {ResultPoint(start, rowNumber), ResultPoint(end, rowNumber)}}; }