From f465c804b78e6aafc6fcc8ddf470ed4435590ceb Mon Sep 17 00:00:00 2001 From: emeric Date: Tue, 4 Apr 2023 23:47:29 +0200 Subject: [PATCH] Minor optims --- src/libs/metadata/impl/TagLibParser.cpp | 28 ++++++++++++------------- src/libs/utils/impl/String.cpp | 7 +++++++ src/libs/utils/include/utils/String.hpp | 5 +++++ 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/src/libs/metadata/impl/TagLibParser.cpp b/src/libs/metadata/impl/TagLibParser.cpp index 3001e05f..dad243ed 100644 --- a/src/libs/metadata/impl/TagLibParser.cpp +++ b/src/libs/metadata/impl/TagLibParser.cpp @@ -50,7 +50,7 @@ using TagMap = std::map>; template std::vector -getPropertyValuesFirstMatchAs(const TagMap& tags, const std::vector& keys) +getPropertyValuesFirstMatchAs(const TagMap& tags, std::initializer_list keys) { std::vector res; @@ -83,7 +83,7 @@ getPropertyValuesFirstMatchAs(const TagMap& tags, const std::vector std::optional -getPropertyValueFirstMatchAs(const TagMap& tags, const std::vector& keys) +getPropertyValueFirstMatchAs(const TagMap& tags, std::initializer_list keys) { std::optional res; std::vector values {getPropertyValuesFirstMatchAs(tags, keys)}; @@ -95,14 +95,14 @@ getPropertyValueFirstMatchAs(const TagMap& tags, const std::vector std::vector -getPropertyValuesAs(const TagMap& tags, const std::string& key) +getPropertyValuesAs(const TagMap& tags, std::string_view key) { return getPropertyValuesFirstMatchAs(tags, {key}); } template std::optional -getPropertyValueAs(const TagMap& tags, const std::string& key) +getPropertyValueAs(const TagMap& tags, std::string_view key) { return getPropertyValueFirstMatchAs(tags, {key}); } @@ -121,22 +121,22 @@ splitAndTrimString(std::string_view str, std::string_view delimiters) static std::vector getArtists(const TagMap& tags, - const std::vector& artistTagNames, - const std::vector& artistSortTagNames, - const std::vector& artistMBIDTagNames + std::initializer_list artistTagNames, + std::initializer_list artistSortTagNames, + std::initializer_list artistMBIDTagNames ) { - const std::vector artistNames {getPropertyValuesFirstMatchAs(tags, artistTagNames)}; + const std::vector artistNames {getPropertyValuesFirstMatchAs(tags, artistTagNames)}; if (artistNames.empty()) return {}; std::vector artists; artists.reserve(artistNames.size()); std::transform(std::cbegin(artistNames), std::cend(artistNames), std::back_inserter(artists), - [&](const std::string& name) { return Artist {name}; }); + [&](std::string_view name) { return Artist {name}; }); { - const std::vector artistSortNames {getPropertyValuesFirstMatchAs(tags, artistSortTagNames)}; + const std::vector artistSortNames {getPropertyValuesFirstMatchAs(tags, artistSortTagNames)}; if (artistSortNames.size() == artists.size()) { for (std::size_t i {}; i < artistSortNames.size(); ++i) @@ -161,14 +161,14 @@ getArtists(const TagMap& tags, static PerformerContainer getPerformerArtists(const TagMap& tags, - const std::vector& artistTagNames) + std::initializer_list artistTagNames) { PerformerContainer performers; // picard stores like this: (see https://picard-docs.musicbrainz.org/en/appendices/tag_mapping.html#performer) // We may hit both styles for the same track // PERFORMER: artist (role) - if (const std::vector artistNames {getPropertyValuesFirstMatchAs(tags, artistTagNames)}; !artistNames.empty()) + if (const std::vector artistNames {getPropertyValuesFirstMatchAs(tags, artistTagNames)}; !artistNames.empty()) { for (std::string_view entry : artistNames) { @@ -216,7 +216,7 @@ getRelease(const TagMap& tags) if (!release->mediumCount) { // mediumCount may be encoded as "position/count" - if (const auto value {getPropertyValueAs(tags, "DISCNUMBER")}) + if (const auto value {getPropertyValueAs(tags, "DISCNUMBER")}) { // Expecting 'Number/Total' const std::vector strings {StringUtils::splitString(*value, "/") }; @@ -248,7 +248,7 @@ getMedium(const TagMap& tags) if (!medium->trackCount) { // totalTracks may be encoded as "position/count" - if (const auto value {getPropertyValueAs(tags, "TRACKNUMBER")}) + if (const auto value {getPropertyValueAs(tags, "TRACKNUMBER")}) { // Expecting 'Number/Total' const std::vector strings {StringUtils::splitString(*value, "/") }; diff --git a/src/libs/utils/impl/String.cpp b/src/libs/utils/impl/String.cpp index 344e3eeb..89c58edf 100644 --- a/src/libs/utils/impl/String.cpp +++ b/src/libs/utils/impl/String.cpp @@ -63,6 +63,13 @@ readAs(std::string_view str) return std::string {str}; } +template<> +std::optional +readAs(std::string_view str) +{ + return str; +} + template<> std::optional readAs(std::string_view str) diff --git a/src/libs/utils/include/utils/String.hpp b/src/libs/utils/include/utils/String.hpp index 95e97c60..dff67ca0 100644 --- a/src/libs/utils/include/utils/String.hpp +++ b/src/libs/utils/include/utils/String.hpp @@ -88,6 +88,11 @@ template<> std::optional readAs(std::string_view str); +template<> +[[nodiscard]] +std::optional +readAs(std::string_view str); + template<> [[nodiscard]] std::optional