Only track partialKeyCapacity in tests
This commit is contained in:
@@ -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);
|
||||
|
Reference in New Issue
Block a user