From 8a44055533fdf8471c23c4b9b21bc42d5999ba01 Mon Sep 17 00:00:00 2001 From: Andrew Noyes Date: Mon, 12 Aug 2024 15:39:09 -0700 Subject: [PATCH] Consume first byte in insert iteration --- ConflictSet.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/ConflictSet.cpp b/ConflictSet.cpp index 7004be4..499f1cf 100644 --- a/ConflictSet.cpp +++ b/ConflictSet.cpp @@ -2779,21 +2779,22 @@ Node **insert(Node **self, std::span key, 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) { - child = tls->allocate(key.size() - 1); + child = tls->allocate(key.size()); child->numChildren = 0; child->entryPresent = false; - child->partialKeyLen = key.size() - 1; + child->partialKeyLen = key.size(); child->parent = *self; - child->parentsIndex = key.front(); + child->parentsIndex = index; setMaxVersion(child, impl, writeVersion); - memcpy(child->partialKey(), key.data() + 1, child->partialKeyLen); + memcpy(child->partialKey(), key.data(), child->partialKeyLen); return &child; } self = &child; - key = key.subspan(1, key.size() - 1); if ((*self)->partialKeyLen > 0) { consumePartialKey(*self, key, writeVersion, tls);