From 86978c057e10321eb76226a8ed80f3c4d5051bc2 Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Tue, 13 Feb 2024 14:43:12 -0800 Subject: [PATCH] Inline nextPhysical and nextSibling in checkRangeRead --- ConflictSet.cpp | 42 ++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 40 insertions(+), 2 deletions(-) diff --git a/ConflictSet.cpp b/ConflictSet.cpp index 11a00db..f2ea7fe 100644 --- a/ConflictSet.cpp +++ b/ConflictSet.cpp @@ -1010,13 +1010,51 @@ bool checkRangeRead(Node *n, const std::span begin, if (iter->maxVersion <= readVersion) { return true; } - iter = nextPhysical(iter, searchPath); + int index = -1; + for (;;) { + auto nextChild = getChildGeq(iter, index + 1); + if (nextChild >= 0) { + auto *result = getChildExists(iter, nextChild); + searchPath.push_back(nextChild); + searchPath.insert(searchPath.end(), result->partialKey, + result->partialKey + result->partialKeyLen); + iter = result; + break; + } + if (iter->parent == nullptr) { + iter = nullptr; + break; + } + searchPath.resize(int(searchPath.size()) - 1 - iter->partialKeyLen); + index = iter->parentsIndex; + iter = iter->parent; + } } else { // end does not start with searchPath, so range end <= end if (iter->maxVersion > readVersion) { return false; } - iter = nextSibling(iter, searchPath); + + for (;;) { + if (iter->parent == nullptr) { + assert(searchPath.size() == 0); + iter = nullptr; + break; + } + auto next = getChildGeq(iter->parent, iter->parentsIndex + 1); + if (next < 0) { + searchPath.resize(int(searchPath.size()) - (1 + iter->partialKeyLen)); + iter = iter->parent; + } else { + searchPath.resize(int(searchPath.size()) - (1 + iter->partialKeyLen)); + auto *result = getChildExists(iter->parent, next); + searchPath.push_back(next); + searchPath.insert(searchPath.end(), result->partialKey, + result->partialKey + result->partialKeyLen); + iter = result; + break; + } + } } } return true;