From bd8065295c4c000c341c7638d809979da26859c1 Mon Sep 17 00:00:00 2001 From: Lioncash Date: Sun, 9 Sep 2018 19:09:37 -0400 Subject: [PATCH 1/2] yuzu: Move compatibility list specifics to their own source files Lets us keep the generic portions of the compatibility list code together, and allows us to introduce a type alias that makes it so we don't need to type out a very long type declaration anymore, making the immediate readability of some code better. --- src/yuzu/CMakeLists.txt | 2 ++ src/yuzu/compatibility_list.cpp | 18 ++++++++++++++++++ src/yuzu/compatibility_list.h | 17 +++++++++++++++++ src/yuzu/game_list.cpp | 1 + src/yuzu/game_list.h | 9 +++------ src/yuzu/game_list_p.h | 11 ----------- src/yuzu/game_list_worker.cpp | 6 +++--- src/yuzu/game_list_worker.h | 8 ++++---- src/yuzu/main.cpp | 10 ++++------ src/yuzu/main.h | 5 ++--- 10 files changed, 54 insertions(+), 33 deletions(-) create mode 100644 src/yuzu/compatibility_list.cpp create mode 100644 src/yuzu/compatibility_list.h diff --git a/src/yuzu/CMakeLists.txt b/src/yuzu/CMakeLists.txt index a2b6e984ee..f48b69809b 100644 --- a/src/yuzu/CMakeLists.txt +++ b/src/yuzu/CMakeLists.txt @@ -9,6 +9,8 @@ add_executable(yuzu about_dialog.h bootmanager.cpp bootmanager.h + compatibility_list.cpp + compatibility_list.h configuration/config.cpp configuration/config.h configuration/configure_audio.cpp diff --git a/src/yuzu/compatibility_list.cpp b/src/yuzu/compatibility_list.cpp new file mode 100644 index 0000000000..2d2cfd03cd --- /dev/null +++ b/src/yuzu/compatibility_list.cpp @@ -0,0 +1,18 @@ +// Copyright 2018 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include + +#include + +#include "yuzu/compatibility_list.h" + +CompatibilityList::const_iterator FindMatchingCompatibilityEntry( + const CompatibilityList& compatibility_list, u64 program_id) { + return std::find_if(compatibility_list.begin(), compatibility_list.end(), + [program_id](const auto& element) { + std::string pid = fmt::format("{:016X}", program_id); + return element.first == pid; + }); +} diff --git a/src/yuzu/compatibility_list.h b/src/yuzu/compatibility_list.h new file mode 100644 index 0000000000..bc0175bd3c --- /dev/null +++ b/src/yuzu/compatibility_list.h @@ -0,0 +1,17 @@ +// Copyright 2018 yuzu Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#pragma once + +#include +#include + +#include + +#include "common/common_types.h" + +using CompatibilityList = std::unordered_map>; + +CompatibilityList::const_iterator FindMatchingCompatibilityEntry( + const CompatibilityList& compatibility_list, u64 program_id); diff --git a/src/yuzu/game_list.cpp b/src/yuzu/game_list.cpp index 86532e4a94..8c6e16d470 100644 --- a/src/yuzu/game_list.cpp +++ b/src/yuzu/game_list.cpp @@ -19,6 +19,7 @@ #include "common/file_util.h" #include "common/logging/log.h" #include "core/file_sys/patch_manager.h" +#include "yuzu/compatibility_list.h" #include "yuzu/game_list.h" #include "yuzu/game_list_p.h" #include "yuzu/game_list_worker.h" diff --git a/src/yuzu/game_list.h b/src/yuzu/game_list.h index 3fcb298ed1..e01b44c200 100644 --- a/src/yuzu/game_list.h +++ b/src/yuzu/game_list.h @@ -4,8 +4,6 @@ #pragma once -#include - #include #include #include @@ -21,6 +19,7 @@ #include #include "common/common_types.h" +#include "yuzu/compatibility_list.h" class GameListWorker; class GMainWindow; @@ -90,9 +89,7 @@ signals: void GameChosen(QString game_path); void ShouldCancelWorker(); void OpenFolderRequested(u64 program_id, GameListOpenTarget target); - void NavigateToGamedbEntryRequested( - u64 program_id, - std::unordered_map>& compatibility_list); + void NavigateToGamedbEntryRequested(u64 program_id, CompatibilityList& compatibility_list); private slots: void onTextChanged(const QString& newText); @@ -114,7 +111,7 @@ private: QStandardItemModel* item_model = nullptr; GameListWorker* current_worker = nullptr; QFileSystemWatcher* watcher = nullptr; - std::unordered_map> compatibility_list; + CompatibilityList compatibility_list; }; Q_DECLARE_METATYPE(GameListOpenTarget); diff --git a/src/yuzu/game_list_p.h b/src/yuzu/game_list_p.h index 2720bf143e..f22e422e58 100644 --- a/src/yuzu/game_list_p.h +++ b/src/yuzu/game_list_p.h @@ -176,14 +176,3 @@ public: return data(SizeRole).toULongLong() < other.data(SizeRole).toULongLong(); } }; - -inline auto FindMatchingCompatibilityEntry( - const std::unordered_map>& compatibility_list, - u64 program_id) { - return std::find_if( - compatibility_list.begin(), compatibility_list.end(), - [program_id](const std::pair>& element) { - std::string pid = fmt::format("{:016X}", program_id); - return element.first == pid; - }); -} diff --git a/src/yuzu/game_list_worker.cpp b/src/yuzu/game_list_worker.cpp index 9f26935d68..e228d61bd7 100644 --- a/src/yuzu/game_list_worker.cpp +++ b/src/yuzu/game_list_worker.cpp @@ -20,6 +20,7 @@ #include "core/file_sys/registered_cache.h" #include "core/hle/service/filesystem/filesystem.h" #include "core/loader/loader.h" +#include "yuzu/compatibility_list.h" #include "yuzu/game_list.h" #include "yuzu/game_list_p.h" #include "yuzu/game_list_worker.h" @@ -75,9 +76,8 @@ QString FormatPatchNameVersions(const FileSys::PatchManager& patch_manager, bool } } // Anonymous namespace -GameListWorker::GameListWorker( - FileSys::VirtualFilesystem vfs, QString dir_path, bool deep_scan, - const std::unordered_map>& compatibility_list) +GameListWorker::GameListWorker(FileSys::VirtualFilesystem vfs, QString dir_path, bool deep_scan, + const CompatibilityList& compatibility_list) : vfs(std::move(vfs)), dir_path(std::move(dir_path)), deep_scan(deep_scan), compatibility_list(compatibility_list) {} diff --git a/src/yuzu/game_list_worker.h b/src/yuzu/game_list_worker.h index 42c93fc31e..09d20c42fc 100644 --- a/src/yuzu/game_list_worker.h +++ b/src/yuzu/game_list_worker.h @@ -16,6 +16,7 @@ #include #include "common/common_types.h" +#include "yuzu/compatibility_list.h" class QStandardItem; @@ -32,9 +33,8 @@ class GameListWorker : public QObject, public QRunnable { Q_OBJECT public: - GameListWorker( - std::shared_ptr vfs, QString dir_path, bool deep_scan, - const std::unordered_map>& compatibility_list); + GameListWorker(std::shared_ptr vfs, QString dir_path, bool deep_scan, + const CompatibilityList& compatibility_list); ~GameListWorker() override; /// Starts the processing of directory tree information. @@ -67,6 +67,6 @@ private: QStringList watch_list; QString dir_path; bool deep_scan; - const std::unordered_map>& compatibility_list; + const CompatibilityList& compatibility_list; std::atomic_bool stop_processing; }; diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index 811e7cd3fe..366169eeff 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -47,6 +47,7 @@ #include "video_core/debug_utils/debug_utils.h" #include "yuzu/about_dialog.h" #include "yuzu/bootmanager.h" +#include "yuzu/compatibility_list.h" #include "yuzu/configuration/config.h" #include "yuzu/configuration/configure_dialog.h" #include "yuzu/debugger/console.h" @@ -725,14 +726,11 @@ void GMainWindow::OnGameListOpenFolder(u64 program_id, GameListOpenTarget target QDesktopServices::openUrl(QUrl::fromLocalFile(qpath)); } -void GMainWindow::OnGameListNavigateToGamedbEntry( - u64 program_id, - std::unordered_map>& compatibility_list) { - - auto it = FindMatchingCompatibilityEntry(compatibility_list, program_id); +void GMainWindow::OnGameListNavigateToGamedbEntry(u64 program_id, + CompatibilityList& compatibility_list) { + const auto it = FindMatchingCompatibilityEntry(compatibility_list, program_id); QString directory; - if (it != compatibility_list.end()) directory = it->second.second; diff --git a/src/yuzu/main.h b/src/yuzu/main.h index 089ea24451..64516a3327 100644 --- a/src/yuzu/main.h +++ b/src/yuzu/main.h @@ -13,6 +13,7 @@ #include "common/common_types.h" #include "core/core.h" #include "ui_main.h" +#include "yuzu/compatibility_list.h" #include "yuzu/hotkeys.h" class Config; @@ -137,9 +138,7 @@ private slots: /// Called whenever a user selects a game in the game list widget. void OnGameListLoadFile(QString game_path); void OnGameListOpenFolder(u64 program_id, GameListOpenTarget target); - void OnGameListNavigateToGamedbEntry( - u64 program_id, - std::unordered_map>& compatibility_list); + void OnGameListNavigateToGamedbEntry(u64 program_id, CompatibilityList& compatibility_list); void OnMenuLoadFile(); void OnMenuLoadFolder(); void OnMenuInstallToNAND(); From 73a2d71f449020dbf4e0cc165de8b1b157bc927c Mon Sep 17 00:00:00 2001 From: Lioncash Date: Sun, 9 Sep 2018 19:35:05 -0400 Subject: [PATCH 2/2] game_list: Make CompatibilityList parameter of NavigateToGamedbEntryRequested() a const reference The compatibility list isn't modified within any of the slots connected to this signal, so we can make it const to enforce immutability. --- src/yuzu/game_list.h | 3 ++- src/yuzu/main.cpp | 2 +- src/yuzu/main.h | 3 ++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/yuzu/game_list.h b/src/yuzu/game_list.h index e01b44c200..2713e7b544 100644 --- a/src/yuzu/game_list.h +++ b/src/yuzu/game_list.h @@ -89,7 +89,8 @@ signals: void GameChosen(QString game_path); void ShouldCancelWorker(); void OpenFolderRequested(u64 program_id, GameListOpenTarget target); - void NavigateToGamedbEntryRequested(u64 program_id, CompatibilityList& compatibility_list); + void NavigateToGamedbEntryRequested(u64 program_id, + const CompatibilityList& compatibility_list); private slots: void onTextChanged(const QString& newText); diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index 366169eeff..e36914f14e 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -727,7 +727,7 @@ void GMainWindow::OnGameListOpenFolder(u64 program_id, GameListOpenTarget target } void GMainWindow::OnGameListNavigateToGamedbEntry(u64 program_id, - CompatibilityList& compatibility_list) { + const CompatibilityList& compatibility_list) { const auto it = FindMatchingCompatibilityEntry(compatibility_list, program_id); QString directory; diff --git a/src/yuzu/main.h b/src/yuzu/main.h index 64516a3327..552e3e61c3 100644 --- a/src/yuzu/main.h +++ b/src/yuzu/main.h @@ -138,7 +138,8 @@ private slots: /// Called whenever a user selects a game in the game list widget. void OnGameListLoadFile(QString game_path); void OnGameListOpenFolder(u64 program_id, GameListOpenTarget target); - void OnGameListNavigateToGamedbEntry(u64 program_id, CompatibilityList& compatibility_list); + void OnGameListNavigateToGamedbEntry(u64 program_id, + const CompatibilityList& compatibility_list); void OnMenuLoadFile(); void OnMenuLoadFolder(); void OnMenuInstallToNAND();