diff --git a/ConflictSet.cpp b/ConflictSet.cpp index 3dd430d..8fb2de2 100644 --- a/ConflictSet.cpp +++ b/ConflictSet.cpp @@ -764,27 +764,21 @@ struct SearchStepWise { bool step() { if (remaining.size() == 0) { return true; - } else { - auto *child = getChild(n, remaining[0]); - if (child != nullptr) { - int i = 0; - for (; i < child->partialKeyLen; ++i) { - if (!(i + 1 < int(remaining.size()) && - remaining[i + 1] == child->partialKey[i])) { - break; - } - } - if (i != child->partialKeyLen) { - return true; - } - n = child; - remaining = - remaining.subspan(1 + child->partialKeyLen, - remaining.size() - (1 + child->partialKeyLen)); - } else { - return true; - } } + auto *child = getChild(n, remaining[0]); + if (child == nullptr) { + return true; + } + int cl = std::min(child->partialKeyLen, remaining.size() - 1); + int i = longestCommonPrefixPartialKey(child->partialKey, + remaining.data() + 1, cl); + if (i != child->partialKeyLen) { + return true; + } + n = child; + remaining = + remaining.subspan(1 + child->partialKeyLen, + remaining.size() - (1 + child->partialKeyLen)); return false; } };