From c99f8fc82677b1c227a210c38b1496d908a24748 Mon Sep 17 00:00:00 2001 From: Spartan322 Date: Mon, 16 Oct 2023 02:21:58 -0400 Subject: Add constraint to `filename_equals` Optimize allocations for `filename_equals` --- src/openvic-simulation/dataloader/Dataloader.cpp | 27 ++++++++++++++---------- 1 file changed, 16 insertions(+), 11 deletions(-) (limited to 'src/openvic-simulation/dataloader') diff --git a/src/openvic-simulation/dataloader/Dataloader.cpp b/src/openvic-simulation/dataloader/Dataloader.cpp index f2e94d7..d0fb55d 100644 --- a/src/openvic-simulation/dataloader/Dataloader.cpp +++ b/src/openvic-simulation/dataloader/Dataloader.cpp @@ -45,17 +45,22 @@ static constexpr bool path_equals(std::string_view lhs, std::string_view rhs) { #endif } -template -static bool filename_equals(const LT& lhs, const RT& rhs) { - std::string left, right; - if constexpr (std::same_as) - left = lhs.filename().string(); - else left = lhs; - - if constexpr (std::same_as) - right = rhs.filename().string(); - else right = rhs; - +template +concept is_filename = std::same_as || std::convertible_to; + +bool filename_equals(const is_filename auto& lhs, const is_filename auto& rhs) { + auto left = [&lhs] { + if constexpr (std::same_as, std::filesystem::path>) + return lhs.filename().string(); + else + return lhs; + }(); + auto right = [&rhs] { + if constexpr (std::same_as, std::filesystem::path>) + return rhs.filename().string(); + else + return rhs; + }(); return path_equals(left, right); } -- cgit v1.2.3-56-ga3b1