Improve complexity of the file scoring

This commit is contained in:
Jean Pierre Cimalando 2020-10-30 08:17:20 +01:00
parent 59e939e907
commit 73051b7135

View file

@ -134,10 +134,8 @@ const fs::path& SfzFileScan::electBestMatch(const fs::path& path, absl::Span<con
return candidates.front(); return candidates.front();
struct Score { struct Score {
size_t index = 0;
size_t components = 0; size_t components = 0;
size_t exact = 0; size_t exact = 0;
explicit Score(size_t index) noexcept : index(index) {}
bool operator<(const Score& other) const noexcept bool operator<(const Score& other) const noexcept
{ {
return (components != other.components) ? return (components != other.components) ?
@ -149,7 +147,7 @@ const fs::path& SfzFileScan::electBestMatch(const fs::path& path, absl::Span<con
scores.reserve(candidates.size()); scores.reserve(candidates.size());
for (size_t i = 0, n = candidates.size(); i < n; ++i) { for (size_t i = 0, n = candidates.size(); i < n; ++i) {
scores.emplace_back(i); scores.emplace_back();
Score& score = scores.back(); Score& score = scores.back();
const fs::path& p1 = path; const fs::path& p1 = path;
@ -169,9 +167,13 @@ const fs::path& SfzFileScan::electBestMatch(const fs::path& path, absl::Span<con
} }
} }
std::stable_sort(scores.begin(), scores.end()); size_t best = 0;
for (size_t i = 1, n = scores.size(); i < n; ++i) {
if (scores[best] < scores[i])
best = i;
}
return candidates[scores[0].index]; return candidates[best];
} }
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------