Use longestCommonPrefixPartialKey in insert

This commit is contained in:
2024-02-22 14:46:52 -08:00
parent 608b4fb6c7
commit 505c060a28

View File

@@ -1389,28 +1389,26 @@ bool checkRangeRead(Node *n, std::span<const uint8_t> begin,
for (;;) {
auto &self = *self_;
// Handle an existing partial key
int partialKeyIndex = 0;
for (; partialKeyIndex < self->partialKeyLen; ++partialKeyIndex) {
if (partialKeyIndex == int(key.size()) ||
self->partialKey[partialKeyIndex] != key[partialKeyIndex]) {
auto *old = self;
self = allocators->node4.allocate();
self->maxVersion = old->maxVersion;
self->partialKeyLen = partialKeyIndex;
self->parent = old->parent;
self->parentsIndex = old->parentsIndex;
memcpy(self->partialKey, old->partialKey, partialKeyIndex);
int commonLen = std::min<int>(self->partialKeyLen, key.size());
int partialKeyIndex =
longestCommonPrefixPartialKey(self->partialKey, key.data(), commonLen);
if (partialKeyIndex < self->partialKeyLen) {
auto *old = self;
self = allocators->node4.allocate();
self->maxVersion = old->maxVersion;
self->partialKeyLen = partialKeyIndex;
self->parent = old->parent;
self->parentsIndex = old->parentsIndex;
memcpy(self->partialKey, old->partialKey, partialKeyIndex);
getOrCreateChild(self, old->partialKey[partialKeyIndex], allocators) =
old;
old->parent = self;
old->parentsIndex = old->partialKey[partialKeyIndex];
getOrCreateChild(self, old->partialKey[partialKeyIndex], allocators) =
old;
old->parent = self;
old->parentsIndex = old->partialKey[partialKeyIndex];
memmove(old->partialKey, old->partialKey + partialKeyIndex + 1,
old->partialKeyLen - (partialKeyIndex + 1));
old->partialKeyLen -= partialKeyIndex + 1;
break;
}
memmove(old->partialKey, old->partialKey + partialKeyIndex + 1,
old->partialKeyLen - (partialKeyIndex + 1));
old->partialKeyLen -= partialKeyIndex + 1;
}
key = key.subspan(partialKeyIndex, key.size() - partialKeyIndex);