aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorlizzie <lizzie@eden-emu.dev>2026-05-15 22:05:32 +0200
committercrueter <crueter@eden-emu.dev>2026-05-15 22:05:32 +0200
commit02dee4a20b7edbe094e7428f3b4f59bacbaa043f (patch)
treef216212dea608fda94fa352a9a1008dbd9f2f379 /src
parentbc9b9480fbbde8ee6ad2fc118e9f0afc96dd65ec (diff)
[file_sys/system_archive] remove uneeded ctor/dtor initializations for std::map<> when creating system archives for nx_tzdb generated files (#3919)
sounds like word salad but let me say: - std::map<> created a static ctor for EVERY SINGLE ZONEINFO - fuck that, instead lets just use a raw array and construct things statically - works the same except with less baggage carried around (+ less heap allocations!!!) this should help reduce codesize due to the aforementioned global ctor/dtor Signed-off-by: lizzie <lizzie@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3919 Reviewed-by: crueter <crueter@eden-emu.dev>
Diffstat (limited to 'src')
-rw-r--r--src/core/file_sys/system_archive/time_zone_binary.cpp96
1 files changed, 29 insertions, 67 deletions
diff --git a/src/core/file_sys/system_archive/time_zone_binary.cpp b/src/core/file_sys/system_archive/time_zone_binary.cpp
index 316ff0dc6f..9b79b6fcd3 100644
--- a/src/core/file_sys/system_archive/time_zone_binary.cpp
+++ b/src/core/file_sys/system_archive/time_zone_binary.cpp
@@ -1,86 +1,48 @@
+// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
+// SPDX-License-Identifier: GPL-3.0-or-later
+
// SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
+#include <span>
#include <vector>
#include "common/swap.h"
#include "core/file_sys/system_archive/time_zone_binary.h"
+#include "core/file_sys/vfs/vfs_static.h"
+#include "core/file_sys/vfs/vfs_types.h"
#include "core/file_sys/vfs/vfs_vector.h"
#include "nx_tzdb.h"
namespace FileSys::SystemArchive {
-const static std::map<std::string, const std::map<const char*, const std::vector<u8>>&>
- tzdb_zoneinfo_dirs = {{"Africa", NxTzdb::africa},
- {"America", NxTzdb::america},
- {"Antarctica", NxTzdb::antarctica},
- {"Arctic", NxTzdb::arctic},
- {"Asia", NxTzdb::asia},
- {"Atlantic", NxTzdb::atlantic},
- {"Australia", NxTzdb::australia},
- {"Brazil", NxTzdb::brazil},
- {"Canada", NxTzdb::canada},
- {"Chile", NxTzdb::chile},
- {"Etc", NxTzdb::etc},
- {"Europe", NxTzdb::europe},
- {"Indian", NxTzdb::indian},
- {"Mexico", NxTzdb::mexico},
- {"Pacific", NxTzdb::pacific},
- {"US", NxTzdb::us}};
-
-const static std::map<std::string, const std::map<const char*, const std::vector<u8>>&>
- tzdb_america_dirs = {{"Argentina", NxTzdb::america_argentina},
- {"Indiana", NxTzdb::america_indiana},
- {"Kentucky", NxTzdb::america_kentucky},
- {"North_Dakota", NxTzdb::america_north_dakota}};
-
-static void GenerateFiles(std::vector<VirtualFile>& directory,
- const std::map<const char*, const std::vector<u8>>& files) {
- for (const auto& [filename, data] : files) {
- const auto data_copy{data};
- const std::string filename_copy{filename};
- VirtualFile file{
- std::make_shared<VectorVfsFile>(std::move(data_copy), std::move(filename_copy))};
- directory.push_back(file);
- }
-}
-
-static std::vector<VirtualFile> GenerateZoneinfoFiles() {
- std::vector<VirtualFile> zoneinfo_files;
- GenerateFiles(zoneinfo_files, NxTzdb::zoneinfo);
- return zoneinfo_files;
-}
-
VirtualDir TimeZoneBinary() {
std::vector<VirtualDir> america_sub_dirs;
- for (const auto& [dir_name, files] : tzdb_america_dirs) {
- std::vector<VirtualFile> vfs_files;
- GenerateFiles(vfs_files, files);
- america_sub_dirs.push_back(std::make_shared<VectorVfsDirectory>(
- std::move(vfs_files), std::vector<VirtualDir>{}, dir_name));
- }
-
+ america_sub_dirs.push_back(std::make_shared<VectorVfsDirectory>(NxTzdb::CollectFiles_america_argentina(), std::vector<VirtualDir>{}, "Argentina"));
+ america_sub_dirs.push_back(std::make_shared<VectorVfsDirectory>(NxTzdb::CollectFiles_america_indiana(), std::vector<VirtualDir>{}, "Indiana"));
+ america_sub_dirs.push_back(std::make_shared<VectorVfsDirectory>(NxTzdb::CollectFiles_america_kentucky(), std::vector<VirtualDir>{}, "Kentucky"));
+ america_sub_dirs.push_back(std::make_shared<VectorVfsDirectory>(NxTzdb::CollectFiles_america_north_dakota(), std::vector<VirtualDir>{}, "North_Dakota"));
std::vector<VirtualDir> zoneinfo_sub_dirs;
- for (const auto& [dir_name, files] : tzdb_zoneinfo_dirs) {
- std::vector<VirtualFile> vfs_files;
- GenerateFiles(vfs_files, files);
- if (dir_name == "America") {
- zoneinfo_sub_dirs.push_back(std::make_shared<VectorVfsDirectory>(
- std::move(vfs_files), std::move(america_sub_dirs), dir_name));
- } else {
- zoneinfo_sub_dirs.push_back(std::make_shared<VectorVfsDirectory>(
- std::move(vfs_files), std::vector<VirtualDir>{}, dir_name));
- }
- }
-
- std::vector<VirtualDir> zoneinfo_dir{std::make_shared<VectorVfsDirectory>(
- GenerateZoneinfoFiles(), std::move(zoneinfo_sub_dirs), "zoneinfo")};
- std::vector<VirtualFile> root_files;
- GenerateFiles(root_files, NxTzdb::base);
-
- return std::make_shared<VectorVfsDirectory>(std::move(root_files), std::move(zoneinfo_dir),
- "data");
+ zoneinfo_sub_dirs.push_back(std::make_shared<VectorVfsDirectory>(NxTzdb::CollectFiles_africa(), std::vector<VirtualDir>{}, "Africa"));
+ zoneinfo_sub_dirs.push_back(std::make_shared<VectorVfsDirectory>(NxTzdb::CollectFiles_america(), std::move(america_sub_dirs), "America"));
+ zoneinfo_sub_dirs.push_back(std::make_shared<VectorVfsDirectory>(NxTzdb::CollectFiles_antarctica(), std::vector<VirtualDir>{}, "Antarctica"));
+ zoneinfo_sub_dirs.push_back(std::make_shared<VectorVfsDirectory>(NxTzdb::CollectFiles_arctic(), std::vector<VirtualDir>{}, "Arctic"));
+ zoneinfo_sub_dirs.push_back(std::make_shared<VectorVfsDirectory>(NxTzdb::CollectFiles_asia(), std::vector<VirtualDir>{}, "Asia"));
+ zoneinfo_sub_dirs.push_back(std::make_shared<VectorVfsDirectory>(NxTzdb::CollectFiles_atlantic(), std::vector<VirtualDir>{}, "Atlantic"));
+ zoneinfo_sub_dirs.push_back(std::make_shared<VectorVfsDirectory>(NxTzdb::CollectFiles_australia(), std::vector<VirtualDir>{}, "Australia"));
+ zoneinfo_sub_dirs.push_back(std::make_shared<VectorVfsDirectory>(NxTzdb::CollectFiles_brazil(), std::vector<VirtualDir>{}, "Brazil"));
+ zoneinfo_sub_dirs.push_back(std::make_shared<VectorVfsDirectory>(NxTzdb::CollectFiles_canada(), std::vector<VirtualDir>{}, "Canada"));
+ zoneinfo_sub_dirs.push_back(std::make_shared<VectorVfsDirectory>(NxTzdb::CollectFiles_chile(), std::vector<VirtualDir>{}, "Chile"));
+ zoneinfo_sub_dirs.push_back(std::make_shared<VectorVfsDirectory>(NxTzdb::CollectFiles_etc(), std::vector<VirtualDir>{}, "Etc"));
+ zoneinfo_sub_dirs.push_back(std::make_shared<VectorVfsDirectory>(NxTzdb::CollectFiles_europe(), std::vector<VirtualDir>{}, "Europe"));
+ zoneinfo_sub_dirs.push_back(std::make_shared<VectorVfsDirectory>(NxTzdb::CollectFiles_indian(), std::vector<VirtualDir>{}, "Indian"));
+ zoneinfo_sub_dirs.push_back(std::make_shared<VectorVfsDirectory>(NxTzdb::CollectFiles_mexico(), std::vector<VirtualDir>{}, "Mexico"));
+ zoneinfo_sub_dirs.push_back(std::make_shared<VectorVfsDirectory>(NxTzdb::CollectFiles_pacific(), std::vector<VirtualDir>{}, "Pacific"));
+ zoneinfo_sub_dirs.push_back(std::make_shared<VectorVfsDirectory>(NxTzdb::CollectFiles_us(), std::vector<VirtualDir>{}, "US"));
+ std::vector<VirtualDir> zoneinfo_dir{std::make_shared<VectorVfsDirectory>(NxTzdb::CollectFiles_zoneinfo(), std::move(zoneinfo_sub_dirs), "zoneinfo")};
+ // last files (root)
+ return std::make_shared<VectorVfsDirectory>(NxTzdb::CollectFiles_base(), std::move(zoneinfo_dir), "data");
}
} // namespace FileSys::SystemArchive