Consume first byte in insert iteration
This commit is contained in:
@@ -2779,21 +2779,22 @@ Node **insert(Node **self, std::span<const uint8_t> key,
|
|||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto &child = getOrCreateChild(*self, key.front(), writeVersion, tls);
|
int index = key.front();
|
||||||
|
key = key.subspan(1, key.size() - 1);
|
||||||
|
auto &child = getOrCreateChild(*self, index, writeVersion, tls);
|
||||||
if (!child) {
|
if (!child) {
|
||||||
child = tls->allocate<Node0>(key.size() - 1);
|
child = tls->allocate<Node0>(key.size());
|
||||||
child->numChildren = 0;
|
child->numChildren = 0;
|
||||||
child->entryPresent = false;
|
child->entryPresent = false;
|
||||||
child->partialKeyLen = key.size() - 1;
|
child->partialKeyLen = key.size();
|
||||||
child->parent = *self;
|
child->parent = *self;
|
||||||
child->parentsIndex = key.front();
|
child->parentsIndex = index;
|
||||||
setMaxVersion(child, impl, writeVersion);
|
setMaxVersion(child, impl, writeVersion);
|
||||||
memcpy(child->partialKey(), key.data() + 1, child->partialKeyLen);
|
memcpy(child->partialKey(), key.data(), child->partialKeyLen);
|
||||||
return &child;
|
return &child;
|
||||||
}
|
}
|
||||||
|
|
||||||
self = &child;
|
self = &child;
|
||||||
key = key.subspan(1, key.size() - 1);
|
|
||||||
|
|
||||||
if ((*self)->partialKeyLen > 0) {
|
if ((*self)->partialKeyLen > 0) {
|
||||||
consumePartialKey(*self, key, writeVersion, tls);
|
consumePartialKey(*self, key, writeVersion, tls);
|
||||||
|
Reference in New Issue
Block a user