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