Use longestCommonPrefixPartialKey in insert
This commit is contained in:
@@ -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);
|
||||
|
||||
|
Reference in New Issue
Block a user