From 0e9d58e82a86dc8948aca9bbb12c647023031cbd Mon Sep 17 00:00:00 2001 From: Lioncash Date: Fri, 20 Jul 2018 00:04:51 -0400 Subject: [PATCH 1/2] vfs_offset: std::move file and name parameters of OffsetVfsFile Avoids potentially unnecessary atomic reference count incrementing and decrementing, as well as string copying. --- src/core/file_sys/vfs_offset.cpp | 6 ++++-- src/core/file_sys/vfs_offset.h | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/core/file_sys/vfs_offset.cpp b/src/core/file_sys/vfs_offset.cpp index 288499cb51..31fdd9aa19 100644 --- a/src/core/file_sys/vfs_offset.cpp +++ b/src/core/file_sys/vfs_offset.cpp @@ -2,13 +2,15 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. +#include + #include "core/file_sys/vfs_offset.h" namespace FileSys { OffsetVfsFile::OffsetVfsFile(std::shared_ptr file_, size_t size_, size_t offset_, - const std::string& name_) - : file(file_), offset(offset_), size(size_), name(name_) {} + std::string name_) + : file(std::move(file_)), offset(offset_), size(size_), name(std::move(name_)) {} std::string OffsetVfsFile::GetName() const { return name.empty() ? file->GetName() : name; diff --git a/src/core/file_sys/vfs_offset.h b/src/core/file_sys/vfs_offset.h index adc615b389..2e16e47eba 100644 --- a/src/core/file_sys/vfs_offset.h +++ b/src/core/file_sys/vfs_offset.h @@ -14,7 +14,7 @@ namespace FileSys { // the size of this wrapper. struct OffsetVfsFile : public VfsFile { OffsetVfsFile(std::shared_ptr file, size_t size, size_t offset = 0, - const std::string& new_name = ""); + std::string new_name = ""); std::string GetName() const override; size_t GetSize() const override; From 8874d0e657be9b2f03608a91bcf5edf433e576c7 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Fri, 20 Jul 2018 00:10:21 -0400 Subject: [PATCH 2/2] loader/{nca, nro}: std::move VirtualFile in the constructors where applicable This avoids unnecessary atomic reference count increments and decrements --- src/core/loader/nca.cpp | 3 ++- src/core/loader/nro.cpp | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/core/loader/nca.cpp b/src/core/loader/nca.cpp index e73b253b2b..c80df23be0 100644 --- a/src/core/loader/nca.cpp +++ b/src/core/loader/nca.cpp @@ -2,6 +2,7 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. +#include #include #include "common/file_util.h" @@ -21,7 +22,7 @@ namespace Loader { -AppLoader_NCA::AppLoader_NCA(FileSys::VirtualFile file) : AppLoader(file) {} +AppLoader_NCA::AppLoader_NCA(FileSys::VirtualFile file) : AppLoader(std::move(file)) {} FileType AppLoader_NCA::IdentifyType(const FileSys::VirtualFile& file) { // TODO(DarkLordZach): Assuming everything is decrypted. Add crypto support. diff --git a/src/core/loader/nro.cpp b/src/core/loader/nro.cpp index 465b827bb0..c020399f27 100644 --- a/src/core/loader/nro.cpp +++ b/src/core/loader/nro.cpp @@ -2,6 +2,7 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. +#include #include #include "common/common_funcs.h" @@ -48,7 +49,7 @@ struct ModHeader { }; static_assert(sizeof(ModHeader) == 0x1c, "ModHeader has incorrect size."); -AppLoader_NRO::AppLoader_NRO(FileSys::VirtualFile file) : AppLoader(file) {} +AppLoader_NRO::AppLoader_NRO(FileSys::VirtualFile file) : AppLoader(std::move(file)) {} FileType AppLoader_NRO::IdentifyType(const FileSys::VirtualFile& file) { // Read NSO header