eraseBetween bug fixes
This commit is contained in:
@@ -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);
|
||||||
|
Reference in New Issue
Block a user