More unnesting
This commit is contained in:
@@ -967,10 +967,7 @@ bool checkRangeStartsWith(Node *n, std::span<const uint8_t> key, int begin,
|
|||||||
}
|
}
|
||||||
|
|
||||||
int c = getChildGeq(n, remaining[0]);
|
int c = getChildGeq(n, remaining[0]);
|
||||||
if (c == remaining[0]) {
|
if (c != remaining[0]) {
|
||||||
n = getChildExists(n, c);
|
|
||||||
remaining = remaining.subspan(1, remaining.size() - 1);
|
|
||||||
} else {
|
|
||||||
if (c >= 0) {
|
if (c >= 0) {
|
||||||
n = getChildExists(n, c);
|
n = getChildExists(n, c);
|
||||||
goto downLeftSpine;
|
goto downLeftSpine;
|
||||||
@@ -980,6 +977,9 @@ bool checkRangeStartsWith(Node *n, std::span<const uint8_t> key, int begin,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
n = getChildExists(n, c);
|
||||||
|
remaining = remaining.subspan(1, remaining.size() - 1);
|
||||||
|
|
||||||
if (n->partialKeyLen > 0) {
|
if (n->partialKeyLen > 0) {
|
||||||
int commonLen = std::min<int>(n->partialKeyLen, remaining.size());
|
int commonLen = std::min<int>(n->partialKeyLen, remaining.size());
|
||||||
int i = longestCommonPrefixPartialKey(n->partialKey, remaining.data(),
|
int i = longestCommonPrefixPartialKey(n->partialKey, remaining.data(),
|
||||||
@@ -1065,11 +1065,7 @@ struct CheckRangeLeftSide {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int c = getChildGeq(n, remaining[0]);
|
int c = getChildGeq(n, remaining[0]);
|
||||||
if (c == remaining[0]) {
|
if (c != remaining[0]) {
|
||||||
n = getChildExists(n, c);
|
|
||||||
remaining = remaining.subspan(1, remaining.size() - 1);
|
|
||||||
++searchPathLen;
|
|
||||||
} else {
|
|
||||||
if (c >= 0) {
|
if (c >= 0) {
|
||||||
if (searchPathLen < prefixLen) {
|
if (searchPathLen < prefixLen) {
|
||||||
n = getChildExists(n, c);
|
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) {
|
if (n->partialKeyLen > 0) {
|
||||||
int commonLen = std::min<int>(n->partialKeyLen, remaining.size());
|
int commonLen = std::min<int>(n->partialKeyLen, remaining.size());
|
||||||
int i = longestCommonPrefix(n->partialKey, remaining.data(), commonLen);
|
int i = longestCommonPrefix(n->partialKey, remaining.data(), commonLen);
|
||||||
@@ -1206,11 +1206,7 @@ struct CheckRangeRightSide {
|
|||||||
}
|
}
|
||||||
|
|
||||||
int c = getChildGeq(n, remaining[0]);
|
int c = getChildGeq(n, remaining[0]);
|
||||||
if (c == remaining[0]) {
|
if (c != remaining[0]) {
|
||||||
n = getChildExists(n, c);
|
|
||||||
remaining = remaining.subspan(1, remaining.size() - 1);
|
|
||||||
++searchPathLen;
|
|
||||||
} else {
|
|
||||||
if (c >= 0) {
|
if (c >= 0) {
|
||||||
n = getChildExists(n, c);
|
n = getChildExists(n, c);
|
||||||
return downLeftSpine();
|
return downLeftSpine();
|
||||||
@@ -1219,6 +1215,10 @@ struct CheckRangeRightSide {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
n = getChildExists(n, c);
|
||||||
|
remaining = remaining.subspan(1, remaining.size() - 1);
|
||||||
|
++searchPathLen;
|
||||||
|
|
||||||
if (n->partialKeyLen > 0) {
|
if (n->partialKeyLen > 0) {
|
||||||
int commonLen = std::min<int>(n->partialKeyLen, remaining.size());
|
int commonLen = std::min<int>(n->partialKeyLen, remaining.size());
|
||||||
int i = longestCommonPrefixPartialKey(n->partialKey, remaining.data(),
|
int i = longestCommonPrefixPartialKey(n->partialKey, remaining.data(),
|
||||||
@@ -1574,27 +1574,28 @@ struct FirstGeqStepwise {
|
|||||||
// Not being done implies that n is not the firstGeq
|
// Not being done implies that n is not the firstGeq
|
||||||
bool step() {
|
bool step() {
|
||||||
switch (phase) {
|
switch (phase) {
|
||||||
case Search:
|
case Search: {
|
||||||
if (remaining.size() == 0) {
|
if (remaining.size() == 0) {
|
||||||
int c = getChildGeq(n, 0);
|
int c = getChildGeq(n, 0);
|
||||||
assert(c >= 0);
|
assert(c >= 0);
|
||||||
n = getChildExists(n, c);
|
n = getChildExists(n, c);
|
||||||
return downLeftSpine();
|
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);
|
n = getChildExists(n, c);
|
||||||
remaining = remaining.subspan(1, remaining.size() - 1);
|
return downLeftSpine();
|
||||||
} else {
|
} else {
|
||||||
if (c >= 0) {
|
n = nextSibling(n);
|
||||||
n = getChildExists(n, c);
|
return downLeftSpine();
|
||||||
return downLeftSpine();
|
|
||||||
} else {
|
|
||||||
n = nextSibling(n);
|
|
||||||
return downLeftSpine();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
n = getChildExists(n, c);
|
||||||
|
remaining = remaining.subspan(1, remaining.size() - 1);
|
||||||
|
|
||||||
if (n->partialKeyLen > 0) {
|
if (n->partialKeyLen > 0) {
|
||||||
int commonLen = std::min<int>(n->partialKeyLen, remaining.size());
|
int commonLen = std::min<int>(n->partialKeyLen, remaining.size());
|
||||||
int i = longestCommonPrefixPartialKey(n->partialKey, remaining.data(),
|
int i = longestCommonPrefixPartialKey(n->partialKey, remaining.data(),
|
||||||
@@ -1618,6 +1619,7 @@ struct FirstGeqStepwise {
|
|||||||
return downLeftSpine();
|
return downLeftSpine();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
[[fallthrough]];
|
[[fallthrough]];
|
||||||
case Init:
|
case Init:
|
||||||
phase = Search;
|
phase = Search;
|
||||||
|
Reference in New Issue
Block a user