diff --git a/ConflictSet.cpp b/ConflictSet.cpp index ca32d70..d088259 100644 --- a/ConflictSet.cpp +++ b/ConflictSet.cpp @@ -2595,39 +2595,16 @@ downLeftSpine: // Return true if the max version among all keys that start with key[:prefixLen] // that are < key is <= readVersion struct CheckRangeRightSide { - CheckRangeRightSide(Node *n, std::span key, int prefixLen, - InternalVersionT readVersion, ReadContext *tls) - : n(n), key(key), remaining(key), prefixLen(prefixLen), - readVersion(readVersion), impl(tls->impl), tls(tls) { -#if DEBUG_VERBOSE && !defined(NDEBUG) - fprintf(stderr, "Check range right side to %s for keys starting with %s\n", - printable(key).c_str(), - printable(key.subspan(0, prefixLen)).c_str()); -#endif - } - Node *n; - std::span key; - std::span remaining; - int prefixLen; - InternalVersionT readVersion; - ConflictSet::Impl *impl; - ReadContext *tls; - int searchPathLen = 0; bool ok; - bool step() { -#if DEBUG_VERBOSE && !defined(NDEBUG) - fprintf(stderr, - "Search path: %s, searchPathLen: %d, prefixLen: %d, remaining: " - "%s\n", - getSearchPathPrintable(n).c_str(), searchPathLen, prefixLen, - printable(remaining).c_str()); -#endif - - assert(searchPathLen <= int(key.size())); + bool step(Node *n, std::span key, int prefixLen, + InternalVersionT readVersion, ReadContext *tls) { + auto remaining = key; + int searchPathLen = 0; for (;; ++tls->range_read_iterations_accum) { + assert(searchPathLen <= int(key.size())); if (remaining.size() == 0) { goto downLeftSpine; } @@ -2784,8 +2761,8 @@ bool checkRangeRead(Node *n, std::span begin, lcp -= consumed; if (lcp == int(begin.size())) { - CheckRangeRightSide checkRangeRightSide{n, end, lcp, readVersion, tls}; - for (; !checkRangeRightSide.step();) + CheckRangeRightSide checkRangeRightSide{}; + for (; !checkRangeRightSide.step(n, end, lcp, readVersion, tls);) ; return checkRangeRightSide.ok; } @@ -2799,8 +2776,8 @@ bool checkRangeRead(Node *n, std::span begin, // were false, then we would have returned above since lcp == begin.size(). assert(!(n->parent == nullptr && begin.size() == 0)); bool lhsOk = checkRangeLeftSide(n, begin, lcp + 1, readVersion, tls); - CheckRangeRightSide checkRangeRightSide{n, end, lcp + 1, readVersion, tls}; - for (; !checkRangeRightSide.step();) + CheckRangeRightSide checkRangeRightSide{}; + for (; !checkRangeRightSide.step(n, end, lcp + 1, readVersion, tls);) ; return lhsOk && checkRangeRightSide.ok;