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