committed by
crueter
3 changed files with 53 additions and 74 deletions
-
24externals/nx_tzdb/NxTzdbCreateHeader.cmake
-
6externals/nx_tzdb/tzdb_template.h.in
-
97src/core/file_sys/system_archive/time_zone_binary.cpp
@ -1,86 +1,53 @@ |
|||||
// SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
|
||||
|
#include <span>
|
||||
#include <vector>
|
#include <vector>
|
||||
|
|
||||
#include "common/swap.h"
|
#include "common/swap.h"
|
||||
#include "core/file_sys/system_archive/time_zone_binary.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 "core/file_sys/vfs/vfs_vector.h"
|
||||
|
|
||||
#include "nx_tzdb.h"
|
#include "nx_tzdb.h"
|
||||
|
|
||||
namespace FileSys::SystemArchive { |
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}};
|
||||
|
|
||||
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; |
|
||||
} |
|
||||
|
template<typename F> |
||||
|
|
||||
VirtualDir TimeZoneBinary() { |
VirtualDir TimeZoneBinary() { |
||||
std::vector<VirtualDir> america_sub_dirs; |
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; |
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
|
} // namespace FileSys::SystemArchive
|
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue