Only track partialKeyCapacity in tests

This commit is contained in:
2024-03-08 13:58:40 -08:00
parent d91538dcad
commit 93e487c8fb

View File

@@ -180,7 +180,9 @@ struct Node {
/* end section that's copied to the next node */
Type type;
#ifndef NDEBUG
int32_t partialKeyCapacity;
#endif
uint8_t *partialKey();
};
@@ -239,7 +241,9 @@ struct Node256 : Node {
template <class NodeT> NodeT *newNode(int partialKeyCapacity) {
auto *result = new (safe_malloc(sizeof(NodeT) + partialKeyCapacity)) NodeT;
#ifndef NDEBUG
result->partialKeyCapacity = partialKeyCapacity;
#endif
return result;
}
@@ -492,7 +496,7 @@ Node *&getOrCreateChild(Node *&self, uint8_t index) {
auto *newSelf = newNode<Node4>(self->partialKeyLen);
memcpy((char *)newSelf + kNodeCopyBegin, (char *)self + kNodeCopyBegin,
kNodeCopySize);
memcpy(newSelf->partialKey(), self->partialKey(), self->partialKeyLen);
memcpy(newSelf->partialKey(), self0->partialKey(), self->partialKeyLen);
free(self0);
self = newSelf;
@@ -505,7 +509,7 @@ Node *&getOrCreateChild(Node *&self, uint8_t index) {
auto *newSelf = newNode<Node16>(self->partialKeyLen);
memcpy((char *)newSelf + kNodeCopyBegin, (char *)self + kNodeCopyBegin,
kNodeCopySize);
memcpy(newSelf->partialKey(), self->partialKey(), self->partialKeyLen);
memcpy(newSelf->partialKey(), self4->partialKey(), self->partialKeyLen);
// TODO replace with memcpy?
for (int i = 0; i < 4; ++i) {
newSelf->index[i] = self4->index[i];
@@ -525,7 +529,7 @@ Node *&getOrCreateChild(Node *&self, uint8_t index) {
auto *newSelf = newNode<Node48>(self->partialKeyLen);
memcpy((char *)newSelf + kNodeCopyBegin, (char *)self + kNodeCopyBegin,
kNodeCopySize);
memcpy(newSelf->partialKey(), self->partialKey(), self->partialKeyLen);
memcpy(newSelf->partialKey(), self16->partialKey(), self->partialKeyLen);
newSelf->nextFree = 16;
int i = 0;
for (auto x : self16->index) {
@@ -566,7 +570,7 @@ Node *&getOrCreateChild(Node *&self, uint8_t index) {
auto *newSelf = newNode<Node256>(self->partialKeyLen);
memcpy((char *)newSelf + kNodeCopyBegin, (char *)self + kNodeCopyBegin,
kNodeCopySize);
memcpy(newSelf->partialKey(), self->partialKey(), self->partialKeyLen);
memcpy(newSelf->partialKey(), self48->partialKey(), self->partialKeyLen);
newSelf->bitSet = self48->bitSet;
newSelf->bitSet.forEachInRange(
[&](int i) {
@@ -1492,8 +1496,8 @@ template <bool kBegin>
} else {
// Consider adding a partial key
if ((*self)->numChildren == 0 && !(*self)->entryPresent) {
(*self)->partialKeyLen =
std::min<int>(key.size(), (*self)->partialKeyCapacity);
assert((*self)->partialKeyCapacity == int(key.size()));
(*self)->partialKeyLen = key.size();
memcpy((*self)->partialKey(), key.data(), (*self)->partialKeyLen);
key = key.subspan((*self)->partialKeyLen,
key.size() - (*self)->partialKeyLen);