Avoid longestCommonPrefix if partialKeyLen == 0
This commit is contained in:
@@ -1220,12 +1220,14 @@ getChildUpdatingMaxVersion(Node3 *self, std::span<const uint8_t> &remaining,
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
Node *c = self->children[i];
|
Node *c = self->children[i];
|
||||||
|
if (c->partialKeyLen > 0) {
|
||||||
int commonLen = std::min<int>(c->partialKeyLen, key.size());
|
int commonLen = std::min<int>(c->partialKeyLen, key.size());
|
||||||
int partialKeyIndex =
|
int partialKeyIndex =
|
||||||
longestCommonPrefix(c->partialKey(), key.data(), commonLen);
|
longestCommonPrefix(c->partialKey(), key.data(), commonLen);
|
||||||
if (partialKeyIndex < c->partialKeyLen) {
|
if (partialKeyIndex < c->partialKeyLen) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
remaining = key.subspan(c->partialKeyLen, key.size() - c->partialKeyLen);
|
remaining = key.subspan(c->partialKeyLen, key.size() - c->partialKeyLen);
|
||||||
self->childMaxVersion[i] = maxVersion;
|
self->childMaxVersion[i] = maxVersion;
|
||||||
return &self->children[i];
|
return &self->children[i];
|
||||||
@@ -1241,12 +1243,14 @@ getChildUpdatingMaxVersion(Node16 *self, std::span<const uint8_t> &remaining,
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
Node *c = self->children[i];
|
Node *c = self->children[i];
|
||||||
|
if (c->partialKeyLen > 0) {
|
||||||
int commonLen = std::min<int>(c->partialKeyLen, key.size());
|
int commonLen = std::min<int>(c->partialKeyLen, key.size());
|
||||||
int partialKeyIndex =
|
int partialKeyIndex =
|
||||||
longestCommonPrefix(c->partialKey(), key.data(), commonLen);
|
longestCommonPrefix(c->partialKey(), key.data(), commonLen);
|
||||||
if (partialKeyIndex < c->partialKeyLen) {
|
if (partialKeyIndex < c->partialKeyLen) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
remaining = key.subspan(c->partialKeyLen, key.size() - c->partialKeyLen);
|
remaining = key.subspan(c->partialKeyLen, key.size() - c->partialKeyLen);
|
||||||
self->childMaxVersion[i] = maxVersion;
|
self->childMaxVersion[i] = maxVersion;
|
||||||
return &self->children[i];
|
return &self->children[i];
|
||||||
@@ -1262,12 +1266,14 @@ getChildUpdatingMaxVersion(Node48 *self, std::span<const uint8_t> &remaining,
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
Node *c = self->children[i];
|
Node *c = self->children[i];
|
||||||
|
if (c->partialKeyLen > 0) {
|
||||||
int commonLen = std::min<int>(c->partialKeyLen, key.size());
|
int commonLen = std::min<int>(c->partialKeyLen, key.size());
|
||||||
int partialKeyIndex =
|
int partialKeyIndex =
|
||||||
longestCommonPrefix(c->partialKey(), key.data(), commonLen);
|
longestCommonPrefix(c->partialKey(), key.data(), commonLen);
|
||||||
if (partialKeyIndex < c->partialKeyLen) {
|
if (partialKeyIndex < c->partialKeyLen) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
remaining = key.subspan(c->partialKeyLen, key.size() - c->partialKeyLen);
|
remaining = key.subspan(c->partialKeyLen, key.size() - c->partialKeyLen);
|
||||||
self->childMaxVersion[i] = maxVersion;
|
self->childMaxVersion[i] = maxVersion;
|
||||||
self->maxOfMax[i >> Node48::kMaxOfMaxShift] =
|
self->maxOfMax[i >> Node48::kMaxOfMaxShift] =
|
||||||
@@ -1285,12 +1291,14 @@ getChildUpdatingMaxVersion(Node256 *self, std::span<const uint8_t> &remaining,
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
Node *c = n;
|
Node *c = n;
|
||||||
|
if (c->partialKeyLen > 0) {
|
||||||
int commonLen = std::min<int>(c->partialKeyLen, key.size());
|
int commonLen = std::min<int>(c->partialKeyLen, key.size());
|
||||||
int partialKeyIndex =
|
int partialKeyIndex =
|
||||||
longestCommonPrefix(c->partialKey(), key.data(), commonLen);
|
longestCommonPrefix(c->partialKey(), key.data(), commonLen);
|
||||||
if (partialKeyIndex < c->partialKeyLen) {
|
if (partialKeyIndex < c->partialKeyLen) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
remaining = key.subspan(c->partialKeyLen, key.size() - c->partialKeyLen);
|
remaining = key.subspan(c->partialKeyLen, key.size() - c->partialKeyLen);
|
||||||
self->childMaxVersion[index] = maxVersion;
|
self->childMaxVersion[index] = maxVersion;
|
||||||
self->maxOfMax[index >> Node256::kMaxOfMaxShift] =
|
self->maxOfMax[index >> Node256::kMaxOfMaxShift] =
|
||||||
|
Reference in New Issue
Block a user