From 198b6c9bdd58d76303f75a8577303907967a143e Mon Sep 17 00:00:00 2001 From: bunnei Date: Fri, 4 Nov 2016 23:14:38 -0400 Subject: core: Consolidate top-level system state into a singleton. --- src/core/system.h | 82 ++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 72 insertions(+), 10 deletions(-) (limited to 'src/core/system.h') diff --git a/src/core/system.h b/src/core/system.h index b41fc088a..192a9c447 100644 --- a/src/core/system.h +++ b/src/core/system.h @@ -4,18 +4,80 @@ #pragma once +#include + +#include "core/loader/loader.h" + class EmuWindow; -namespace System { +namespace Core { + +class System { +public: + struct State { + std::unique_ptr app_loader; + }; + + /** + * Gets the instance of the System singleton class. + * @returns Reference to the instance of the System singleton class. + */ + static System& GetInstance() { + return s_instance; + } + + /// Enumeration representing the return values of the System Initialize and Load process. + enum class ResultStatus : u32 { + Success, ///< Succeeded + ErrorGetLoader, ///< Error finding the correct application loader + ErrorSystemMode, ///< Error determining the system mode + ErrorLoader, ///< Error loading the specified application + ErrorLoader_ErrorEncrypted, ///< Error loading the specified application due to encryption + ErrorLoader_ErrorInvalidFormat, ///< Error loading the specified application due to an invalid format + ErrorVideoCore, ///< Error in the video core + }; + + /** + * Initialize the emulated system. + * @param emu_window Pointer to the host-system window used for video output and keyboard input. + * @param system_mode The system mode. + * @returns ResultStatus code, indicating if the operation succeeded. + */ + ResultStatus Init(EmuWindow* emu_window, u32 system_mode); + + /// Shutdown the emulated system. + void Shutdown(); + + /** + * Load an executable application. + * @param emu_window Pointer to the host-system window used for video output and keyboard input. + * @param filepath String path to the executable application to load on the host file system. + * @returns ResultStatus code, indicating if the operation succeeded. + */ + ResultStatus Load(EmuWindow* emu_window, const std::string& filepath); + + /** + * Indicates if the emulated system is powered on (all subsystems initialized and able to run an + * application). + * @returns True if the emulated system is powered on, otherwise false. + */ + bool IsPoweredOn() const { + return is_powered_on; + } + + /** + * Gets the internal state of the emulated system. + * @returns The internal state of the emulated system + */ + State& GetState() { + return state; + } + +private: + bool is_powered_on{}; + State state; -enum class Result { - Success, ///< Everything is fine - Error, ///< Something went wrong (no module specified) - ErrorInitCore, ///< Something went wrong during core init - ErrorInitVideoCore, ///< Something went wrong during video core init + static System s_instance; }; -Result Init(EmuWindow* emu_window, u32 system_mode); -bool IsPoweredOn(); -void Shutdown(); -} +} // namespace Core -- cgit v1.2.3