From edd9bfd54a098f22b2f3c3a75d137cb86ef9a5d0 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Wed, 5 Dec 2018 02:33:13 -0500 Subject: [PATCH 1/2] system_archive: Use a regular function pointer instead of std::function for file-scope system archive array This allows the array to be constexpr. std::function is also allowed to allocate memory, which makes its constructor non-trivial, we definitely don't want to have all of these execute at runtime, taking up time before the application can actually load. --- src/core/file_sys/system_archive/system_archive.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/core/file_sys/system_archive/system_archive.cpp b/src/core/file_sys/system_archive/system_archive.cpp index c9c40a07df..d3883267ce 100644 --- a/src/core/file_sys/system_archive/system_archive.cpp +++ b/src/core/file_sys/system_archive/system_archive.cpp @@ -2,7 +2,6 @@ // Licensed under GPLv2 or any later version // Refer to the license.txt file included. -#include #include "common/logging/log.h" #include "core/file_sys/romfs.h" #include "core/file_sys/system_archive/ng_word.h" @@ -13,7 +12,7 @@ namespace FileSys::SystemArchive { constexpr u64 SYSTEM_ARCHIVE_BASE_TITLE_ID = 0x0100000000000800; constexpr std::size_t SYSTEM_ARCHIVE_COUNT = 0x28; -using SystemArchiveSupplier = std::function; +using SystemArchiveSupplier = VirtualDir (*)(); struct SystemArchiveDescriptor { u64 title_id; @@ -21,7 +20,7 @@ struct SystemArchiveDescriptor { SystemArchiveSupplier supplier; }; -const std::array SYSTEM_ARCHIVES = {{ +constexpr std::array SYSTEM_ARCHIVES{{ {0x0100000000000800, "CertStore", nullptr}, {0x0100000000000801, "ErrorMessage", nullptr}, {0x0100000000000802, "MiiModel", nullptr}, From 2207baaa04c97730e6eaa184aa4f3c4e6537e0d1 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Wed, 5 Dec 2018 02:36:43 -0500 Subject: [PATCH 2/2] ng_word: Deduplicate use of a constant value We've already given the constant to the vector itself, so we don't need to re-hardcode it in the array. --- src/core/file_sys/system_archive/ng_word.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/file_sys/system_archive/ng_word.cpp b/src/core/file_sys/system_archive/ng_word.cpp index d0acdbd494..a24f1e4965 100644 --- a/src/core/file_sys/system_archive/ng_word.cpp +++ b/src/core/file_sys/system_archive/ng_word.cpp @@ -26,7 +26,7 @@ constexpr std::array WORD_TXT{ VirtualDir NgWord1() { std::vector files(NgWord1Data::NUMBER_WORD_TXT_FILES); - for (std::size_t i = 0; i < NgWord1Data::NUMBER_WORD_TXT_FILES; ++i) { + for (std::size_t i = 0; i < files.size(); ++i) { files[i] = std::make_shared>( NgWord1Data::WORD_TXT, fmt::format("{}.txt", i)); }