diff --git a/ConflictSet.cpp b/ConflictSet.cpp index 9636073..0148a6e 100644 --- a/ConflictSet.cpp +++ b/ConflictSet.cpp @@ -967,10 +967,7 @@ bool checkRangeStartsWith(Node *n, std::span key, int begin, } int c = getChildGeq(n, remaining[0]); - if (c == remaining[0]) { - n = getChildExists(n, c); - remaining = remaining.subspan(1, remaining.size() - 1); - } else { + if (c != remaining[0]) { if (c >= 0) { n = getChildExists(n, c); goto downLeftSpine; @@ -980,6 +977,9 @@ bool checkRangeStartsWith(Node *n, std::span key, int begin, } } + n = getChildExists(n, c); + remaining = remaining.subspan(1, remaining.size() - 1); + if (n->partialKeyLen > 0) { int commonLen = std::min(n->partialKeyLen, remaining.size()); int i = longestCommonPrefixPartialKey(n->partialKey, remaining.data(), @@ -1065,11 +1065,7 @@ struct CheckRangeLeftSide { } int c = getChildGeq(n, remaining[0]); - if (c == remaining[0]) { - n = getChildExists(n, c); - remaining = remaining.subspan(1, remaining.size() - 1); - ++searchPathLen; - } else { + if (c != remaining[0]) { if (c >= 0) { if (searchPathLen < prefixLen) { n = getChildExists(n, c); @@ -1084,6 +1080,10 @@ struct CheckRangeLeftSide { } } + n = getChildExists(n, c); + remaining = remaining.subspan(1, remaining.size() - 1); + ++searchPathLen; + if (n->partialKeyLen > 0) { int commonLen = std::min(n->partialKeyLen, remaining.size()); int i = longestCommonPrefix(n->partialKey, remaining.data(), commonLen); @@ -1206,11 +1206,7 @@ struct CheckRangeRightSide { } int c = getChildGeq(n, remaining[0]); - if (c == remaining[0]) { - n = getChildExists(n, c); - remaining = remaining.subspan(1, remaining.size() - 1); - ++searchPathLen; - } else { + if (c != remaining[0]) { if (c >= 0) { n = getChildExists(n, c); return downLeftSpine(); @@ -1219,6 +1215,10 @@ struct CheckRangeRightSide { } } + n = getChildExists(n, c); + remaining = remaining.subspan(1, remaining.size() - 1); + ++searchPathLen; + if (n->partialKeyLen > 0) { int commonLen = std::min(n->partialKeyLen, remaining.size()); int i = longestCommonPrefixPartialKey(n->partialKey, remaining.data(), @@ -1574,27 +1574,28 @@ struct FirstGeqStepwise { // Not being done implies that n is not the firstGeq bool step() { switch (phase) { - case Search: + case Search: { if (remaining.size() == 0) { int c = getChildGeq(n, 0); assert(c >= 0); n = getChildExists(n, c); return downLeftSpine(); - } else { - int c = getChildGeq(n, remaining[0]); - if (c == remaining[0]) { + } + + int c = getChildGeq(n, remaining[0]); + if (c != remaining[0]) { + if (c >= 0) { n = getChildExists(n, c); - remaining = remaining.subspan(1, remaining.size() - 1); + return downLeftSpine(); } else { - if (c >= 0) { - n = getChildExists(n, c); - return downLeftSpine(); - } else { - n = nextSibling(n); - return downLeftSpine(); - } + n = nextSibling(n); + return downLeftSpine(); } } + + n = getChildExists(n, c); + remaining = remaining.subspan(1, remaining.size() - 1); + if (n->partialKeyLen > 0) { int commonLen = std::min(n->partialKeyLen, remaining.size()); int i = longestCommonPrefixPartialKey(n->partialKey, remaining.data(), @@ -1618,6 +1619,7 @@ struct FirstGeqStepwise { return downLeftSpine(); } } + } [[fallthrough]]; case Init: phase = Search;