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 */
|
/* 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);
|
||||||
|
Reference in New Issue
Block a user