eraseBetween bug fixes

This commit is contained in:
2024-08-13 15:59:46 -07:00
parent 0c65a82b78
commit b911d87d55

View File

@@ -1836,9 +1836,8 @@ void eraseBetween(Node48 *&n, int begin, int end, WriteContext *tls) {
*nodeOut++ = n->children[i]; *nodeOut++ = n->children[i];
*indexOut++ = n->reverseIndex[i]; *indexOut++ = n->reverseIndex[i];
*maxVOut++ = n->childMaxVersion[i]; *maxVOut++ = n->childMaxVersion[i];
n->maxOfMax[n->reverseIndex[i] >> Node48::kMaxOfMaxShift] = n->maxOfMax[i >> Node48::kMaxOfMaxShift] = std::max(
std::max(n->maxOfMax[n->reverseIndex[i] >> Node48::kMaxOfMaxShift], n->maxOfMax[i >> Node48::kMaxOfMaxShift], n->childMaxVersion[i]);
n->childMaxVersion[i]);
n->bitSet.set(n->reverseIndex[i]); n->bitSet.set(n->reverseIndex[i]);
n->index[n->reverseIndex[i]] = n->nextFree++; n->index[n->reverseIndex[i]] = n->nextFree++;
} }
@@ -1895,8 +1894,7 @@ void eraseBetween(Node256 *&n, int begin, int end, WriteContext *tls) {
newNode->copyChildrenAndKeyFrom(*n); newNode->copyChildrenAndKeyFrom(*n);
tls->release(n); tls->release(n);
(Node *&)n = newNode; (Node *&)n = newNode;
} } else if (n->numChildren <= Node48::kMaxNodes) {
if (n->numChildren <= Node48::kMaxNodes) {
auto *newNode = tls->allocate<Node48>(n->partialKeyLen); auto *newNode = tls->allocate<Node48>(n->partialKeyLen);
newNode->copyChildrenAndKeyFrom(*n); newNode->copyChildrenAndKeyFrom(*n);
tls->release(n); tls->release(n);