Consume first byte in insert iteration

This commit is contained in:
2024-08-12 15:39:09 -07:00
parent 62516825d1
commit 8a44055533

View File

@@ -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);