From af1e2299de6d45908a06606102bc8fe2eae54e32 Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Mon, 23 Sep 2024 18:38:06 -0700 Subject: [PATCH] Include childType in ChildAndMaxVersion --- ConflictSet.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/ConflictSet.cpp b/ConflictSet.cpp index 80dbdaa..104cb7c 100644 --- a/ConflictSet.cpp +++ b/ConflictSet.cpp @@ -1132,6 +1132,7 @@ Node *getChild(Node *self, uint8_t index) { struct ChildAndMaxVersion { Node *child; InternalVersionT maxVersion; + Type childType; }; ChildAndMaxVersion getChildAndMaxVersion(Node0 *, uint8_t) { return {}; } @@ -1140,24 +1141,28 @@ ChildAndMaxVersion getChildAndMaxVersion(Node3 *self, uint8_t index) { if (i < 0) { return {}; } - return {self->children[i], self->childMaxVersion[i]}; + return {self->children[i], self->childMaxVersion[i], + self->children[i].getType()}; } ChildAndMaxVersion getChildAndMaxVersion(Node16 *self, uint8_t index) { int i = getNodeIndex(self, index); if (i < 0) { return {}; } - return {self->children[i], self->childMaxVersion[i]}; + return {self->children[i], self->childMaxVersion[i], + self->children[i].getType()}; } ChildAndMaxVersion getChildAndMaxVersion(Node48 *self, uint8_t index) { int i = self->index[index]; if (i < 0) { return {}; } - return {self->children[i], self->childMaxVersion[i]}; + return {self->children[i], self->childMaxVersion[i], + self->children[i].getType()}; } ChildAndMaxVersion getChildAndMaxVersion(Node256 *self, uint8_t index) { - return {self->children[index], self->childMaxVersion[index]}; + return {self->children[index], self->childMaxVersion[index], + self->children[index].getType()}; } ChildAndMaxVersion getChildAndMaxVersion(Node *self, uint8_t index) { @@ -1973,7 +1978,7 @@ bool checkPointRead(Node *n, const std::span key, goto downLeftSpine; } - auto [child, maxV] = getChildAndMaxVersion(n, remaining[0]); + auto [child, maxV, childT] = getChildAndMaxVersion(n, remaining[0]); if (child == nullptr) { auto c = getChildGeq(n, remaining[0]); if (c != nullptr) { @@ -2043,7 +2048,7 @@ bool checkPrefixRead(Node *n, const std::span key, return maxVersion(n) <= readVersion; } - auto [child, maxV] = getChildAndMaxVersion(n, remaining[0]); + auto [child, maxV, childT] = getChildAndMaxVersion(n, remaining[0]); if (child == nullptr) { auto c = getChildGeq(n, remaining[0]); if (c != nullptr) { @@ -2642,7 +2647,7 @@ bool checkRangeLeftSide(Node *n, std::span key, int prefixLen, } } - auto [child, maxV] = getChildAndMaxVersion(n, remaining[0]); + auto [child, maxV, childT] = getChildAndMaxVersion(n, remaining[0]); if (child == nullptr) { auto c = getChildGeq(n, remaining[0]); if (c != nullptr) { @@ -2830,7 +2835,7 @@ bool checkRangeRead(Node *n, std::span begin, if (remaining.size() == 0) { break; } - auto [child, v] = getChildAndMaxVersion(n, remaining[0]); + auto [child, v, childT] = getChildAndMaxVersion(n, remaining[0]); if (child == nullptr) { break; }