From ead4f212504e5789ea0cd1ea007a37608c64978e Mon Sep 17 00:00:00 2001 From: Oliver Hamlet Date: Fri, 17 Jan 2025 17:27:31 +0000 Subject: [PATCH] Return a cached reference from PluginSortingData::GetName() Avoiding the string copies improves sorting performance by 7%. --- src/api/sorting/plugin_sorting_data.cpp | 3 ++- src/api/sorting/plugin_sorting_data.h | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/api/sorting/plugin_sorting_data.cpp b/src/api/sorting/plugin_sorting_data.cpp index b0d53393..1f1f1abc 100644 --- a/src/api/sorting/plugin_sorting_data.cpp +++ b/src/api/sorting/plugin_sorting_data.cpp @@ -59,6 +59,7 @@ PluginSortingData::PluginSortingData( const std::vector& loadOrder) : #endif plugin_(plugin), + name_(plugin == nullptr ? std::string() : plugin->GetName()), group_(userMetadata.GetGroup().value_or( masterlistMetadata.GetGroup().value_or(Group::DEFAULT_NAME))), masterlistLoadAfter_(masterlistMetadata.GetLoadAfterFiles()), @@ -89,7 +90,7 @@ PluginSortingData::PluginSortingData( overrideRecordCount_ = plugin->GetOverrideRecordCount(); } -std::string PluginSortingData::GetName() const { return plugin_->GetName(); } +const std::string& PluginSortingData::GetName() const { return name_; } bool PluginSortingData::IsMaster() const { return plugin_ != nullptr && plugin_->IsMaster(); diff --git a/src/api/sorting/plugin_sorting_data.h b/src/api/sorting/plugin_sorting_data.h index 2a8d06fe..1383e67e 100644 --- a/src/api/sorting/plugin_sorting_data.h +++ b/src/api/sorting/plugin_sorting_data.h @@ -49,7 +49,7 @@ public: const std::vector& loadOrder); #endif - std::string GetName() const; + const std::string& GetName() const; bool IsMaster() const; bool IsBlueprintMaster() const; bool LoadsArchive() const; @@ -72,6 +72,7 @@ public: private: const PluginSortingInterface* plugin_{nullptr}; + std::string name_; std::string group_; std::vector masterlistLoadAfter_;