diff --git a/ConflictSet.cpp b/ConflictSet.cpp index d088259..3680250 100644 --- a/ConflictSet.cpp +++ b/ConflictSet.cpp @@ -2596,10 +2596,9 @@ downLeftSpine: // that are < key is <= readVersion struct CheckRangeRightSide { - bool ok; - bool step(Node *n, std::span key, int prefixLen, InternalVersionT readVersion, ReadContext *tls) { + bool ok; auto remaining = key; int searchPathLen = 0; @@ -2612,19 +2611,19 @@ struct CheckRangeRightSide { if (searchPathLen >= prefixLen) { if (n->entryPresent && n->entry.pointVersion > readVersion) { ok = false; - return true; + return ok; } if (!checkMaxBetweenExclusive(n, -1, remaining[0], readVersion, tls)) { ok = false; - return true; + return ok; } } if (searchPathLen > prefixLen && n->entryPresent && n->entry.rangeVersion > readVersion) { ok = false; - return true; + return ok; } auto *child = getChild(n, remaining[0]); @@ -2656,7 +2655,7 @@ struct CheckRangeRightSide { if (searchPathLen > prefixLen && n->entryPresent && n->entry.rangeVersion > readVersion) { ok = false; - return true; + return ok; } goto backtrack; } @@ -2675,11 +2674,11 @@ struct CheckRangeRightSide { // searchPathLen > prefixLen implies n is not the root if (searchPathLen > prefixLen && maxVersion(n) > readVersion) { ok = false; - return true; + return ok; } if (n->parent == nullptr) { ok = true; - return true; + return ok; } auto next = getChildGeq(n->parent, n->parentsIndex + 1); if (next == nullptr) { @@ -2696,7 +2695,7 @@ struct CheckRangeRightSide { for (; !n->entryPresent; n = getFirstChildExists(n)) { } ok = n->entry.rangeVersion <= readVersion; - return true; + return ok; } }; } // namespace @@ -2762,9 +2761,7 @@ bool checkRangeRead(Node *n, std::span begin, if (lcp == int(begin.size())) { CheckRangeRightSide checkRangeRightSide{}; - for (; !checkRangeRightSide.step(n, end, lcp, readVersion, tls);) - ; - return checkRangeRightSide.ok; + return checkRangeRightSide.step(n, end, lcp, readVersion, tls); } if (!checkRangeStartsWith(n, begin.subspan(0, lcp), begin[lcp], end[lcp], @@ -2775,12 +2772,9 @@ bool checkRangeRead(Node *n, std::span begin, // This makes it safe to check maxVersion within CheckRangeLeftSide. If this // 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{}; - for (; !checkRangeRightSide.step(n, end, lcp + 1, readVersion, tls);) - ; - - return lhsOk && checkRangeRightSide.ok; + return checkRangeLeftSide(n, begin, lcp + 1, readVersion, tls) && + checkRangeRightSide.step(n, end, lcp + 1, readVersion, tls); } #ifdef __x86_64__