unsigned findNearest(StringRef Option, std::string &NearestString,
unsigned FlagsToInclude = 0, unsigned FlagsToExclude = 0,
unsigned MinimumLength = 4,
- unsigned MaximumDistance = UINT_MAX - 1) const;
+ unsigned MaximumDistance = UINT_MAX) const;
bool findExact(StringRef Option, std::string &ExactString,
unsigned FlagsToInclude = 0,
// Consider each [option prefix + option name] pair as a candidate, finding
// the closest match.
- unsigned BestDistance = MaximumDistance + 1;
+ unsigned BestDistance =
+ MaximumDistance == UINT_MAX ? UINT_MAX : MaximumDistance + 1;
SmallString<16> Candidate;
SmallString<16> NormalizedName;
// characters of difference, no need to compute the edit distance, it's
// going to be greater than BestDistance. Don't bother computing Candidate
// at all.
- if (std::abs((ssize_t)(CandidatePrefix.size() + CandidateName.size()) -
- (ssize_t)NormalizedName.size()) > (ssize_t)BestDistance) {
+ size_t CandidateSize = CandidatePrefix.size() + CandidateName.size(),
+ NormalizedSize = NormalizedName.size();
+ size_t AbsDiff = CandidateSize > NormalizedSize
+ ? CandidateSize - NormalizedSize
+ : NormalizedSize - CandidateSize;
+ if (AbsDiff > BestDistance) {
continue;
}
Candidate = CandidatePrefix;