From 8d2e28cf76b5b88a897d51045fe2678c4b1df6df Mon Sep 17 00:00:00 2001 From: FearlessTobi Date: Sun, 17 Jan 2021 19:05:43 +0100 Subject: [PATCH] core: Make use of [[nodiscard]] with the System class Given this is a central class, we should flag cases where the return value of some functions not being used is likely a bug. Co-Authored-By: LC <712067+lioncash@users.noreply.github.com> --- src/core/core.h | 83 ++++++++++++++++++++++++------------------------- 1 file changed, 40 insertions(+), 43 deletions(-) diff --git a/src/core/core.h b/src/core/core.h index e7fbd8ee3..b535a60a2 100644 --- a/src/core/core.h +++ b/src/core/core.h @@ -69,7 +69,7 @@ public: * Gets the instance of the System singleton class. * @returns Reference to the instance of the System singleton class. */ - static System& GetInstance() { + [[nodiscard]] static System& GetInstance() { return s_instance; } @@ -106,13 +106,13 @@ public: * @param tight_loop If false, the CPU single-steps. * @return Result status, indicating whethor or not the operation succeeded. */ - ResultStatus RunLoop(bool tight_loop = true); + [[nodiscard]] ResultStatus RunLoop(bool tight_loop = true); /** * Step the CPU one instruction * @return Result status, indicating whethor or not the operation succeeded. */ - ResultStatus SingleStep(); + [[nodiscard]] ResultStatus SingleStep(); /// Shutdown the emulated system. void Shutdown(bool is_deserializing = false); @@ -122,7 +122,7 @@ public: enum class Signal : u32 { None, Shutdown, Reset, Save, Load }; - bool SendSignal(Signal signal, u32 param = 0); + [[nodiscard]] bool SendSignal(Signal signal, u32 param = 0); /// Request reset of the system void RequestReset() { @@ -141,14 +141,14 @@ public: * @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(Frontend::EmuWindow& emu_window, const std::string& filepath); + [[nodiscard]] ResultStatus Load(Frontend::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 { + [[nodiscard]] bool IsPoweredOn() const { return cpu_cores.size() > 0 && std::all_of(cpu_cores.begin(), cpu_cores.end(), [](std::shared_ptr ptr) { return ptr != nullptr; }); @@ -159,21 +159,21 @@ public: * Returns a reference to the telemetry session for this emulation session. * @returns Reference to the telemetry session. */ - Core::TelemetrySession& TelemetrySession() const { + [[nodiscard]] Core::TelemetrySession& TelemetrySession() const { return *telemetry_session; } /// Prepare the core emulation for a reschedule void PrepareReschedule(); - PerfStats::Results GetAndResetPerfStats(); + [[nodiscard]] PerfStats::Results GetAndResetPerfStats(); /** * Gets a reference to the emulated CPU. * @returns A reference to the emulated CPU. */ - ARM_Interface& GetRunningCore() { + [[nodiscard]] ARM_Interface& GetRunningCore() { return *running_core; }; @@ -183,11 +183,11 @@ public: * @returns A reference to the emulated CPU. */ - ARM_Interface& GetCore(u32 core_id) { + [[nodiscard]] ARM_Interface& GetCore(u32 core_id) { return *cpu_cores[core_id]; }; - u32 GetNumCores() const { + [[nodiscard]] u32 GetNumCores() const { return static_cast(cpu_cores.size()); } @@ -201,68 +201,65 @@ public: * Gets a reference to the emulated DSP. * @returns A reference to the emulated DSP. */ - AudioCore::DspInterface& DSP() { + [[nodiscard]] AudioCore::DspInterface& DSP() { return *dsp_core; } - RendererBase& Renderer(); + [[nodiscard]] RendererBase& Renderer(); /** * Gets a reference to the service manager. * @returns A reference to the service manager. */ - Service::SM::ServiceManager& ServiceManager(); + [[nodiscard]] Service::SM::ServiceManager& ServiceManager(); /** * Gets a const reference to the service manager. * @returns A const reference to the service manager. */ - const Service::SM::ServiceManager& ServiceManager() const; + [[nodiscard]] const Service::SM::ServiceManager& ServiceManager() const; /// Gets a reference to the archive manager - Service::FS::ArchiveManager& ArchiveManager(); + [[nodiscard]] Service::FS::ArchiveManager& ArchiveManager(); /// Gets a const reference to the archive manager - const Service::FS::ArchiveManager& ArchiveManager() const; + [[nodiscard]] const Service::FS::ArchiveManager& ArchiveManager() const; /// Gets a reference to the kernel - Kernel::KernelSystem& Kernel(); + [[nodiscard]] Kernel::KernelSystem& Kernel(); /// Gets a const reference to the kernel - const Kernel::KernelSystem& Kernel() const; + [[nodiscard]] const Kernel::KernelSystem& Kernel() const; /// Gets a reference to the timing system - Timing& CoreTiming(); + [[nodiscard]] Timing& CoreTiming(); /// Gets a const reference to the timing system - const Timing& CoreTiming() const; + [[nodiscard]] const Timing& CoreTiming() const; /// Gets a reference to the memory system - Memory::MemorySystem& Memory(); + [[nodiscard]] Memory::MemorySystem& Memory(); /// Gets a const reference to the memory system - const Memory::MemorySystem& Memory() const; + [[nodiscard]] const Memory::MemorySystem& Memory() const; /// Gets a reference to the cheat engine - Cheats::CheatEngine& CheatEngine(); + [[nodiscard]] Cheats::CheatEngine& CheatEngine(); /// Gets a const reference to the cheat engine - const Cheats::CheatEngine& CheatEngine() const; + [[nodiscard]] const Cheats::CheatEngine& CheatEngine() const; /// Gets a reference to the custom texture cache system - Core::CustomTexCache& CustomTexCache(); + [[nodiscard]] Core::CustomTexCache& CustomTexCache(); /// Gets a const reference to the custom texture cache system - const Core::CustomTexCache& CustomTexCache() const; - - /// Handles loading all custom textures from disk into cache. - void PreloadCustomTextures(); + [[nodiscard]] const Core::CustomTexCache& CustomTexCache() const; /// Gets a reference to the video dumper backend - VideoDumper::Backend& VideoDumper(); + [[nodiscard]] VideoDumper::Backend& VideoDumper(); /// Gets a const reference to the video dumper backend - const VideoDumper::Backend& VideoDumper() const; + [[nodiscard]] const VideoDumper::Backend& VideoDumper() const; std::unique_ptr perf_stats; FrameLimiter frame_limiter; @@ -274,11 +271,11 @@ public: } } - const std::string& GetStatusDetails() const { + [[nodiscard]] const std::string& GetStatusDetails() const { return status_details; } - Loader::AppLoader& GetAppLoader() const { + [[nodiscard]] Loader::AppLoader& GetAppLoader() const { return *app_loader; } @@ -288,11 +285,11 @@ public: void RegisterSoftwareKeyboard(std::shared_ptr swkbd); - std::shared_ptr GetMiiSelector() const { + [[nodiscard]] std::shared_ptr GetMiiSelector() const { return registered_mii_selector; } - std::shared_ptr GetSoftwareKeyboard() const { + [[nodiscard]] std::shared_ptr GetSoftwareKeyboard() const { return registered_swkbd; } @@ -300,7 +297,7 @@ public: void RegisterImageInterface(std::shared_ptr image_interface); - std::shared_ptr GetImageInterface() const { + [[nodiscard]] std::shared_ptr GetImageInterface() const { return registered_image_interface; } @@ -316,8 +313,8 @@ private: * @param system_mode The system mode. * @return ResultStatus code, indicating if the operation succeeded. */ - ResultStatus Init(Frontend::EmuWindow& emu_window, u32 system_mode, u8 n3ds_mode, - u32 num_cores); + [[nodiscard]] ResultStatus Init(Frontend::EmuWindow& emu_window, u32 system_mode, u8 n3ds_mode, + u32 num_cores); /// Reschedule the core emulation void Reschedule(); @@ -387,19 +384,19 @@ private: void serialize(Archive& ar, const unsigned int file_version); }; -inline ARM_Interface& GetRunningCore() { +[[nodiscard]] inline ARM_Interface& GetRunningCore() { return System::GetInstance().GetRunningCore(); } -inline ARM_Interface& GetCore(u32 core_id) { +[[nodiscard]] inline ARM_Interface& GetCore(u32 core_id) { return System::GetInstance().GetCore(core_id); } -inline u32 GetNumCores() { +[[nodiscard]] inline u32 GetNumCores() { return System::GetInstance().GetNumCores(); } -inline AudioCore::DspInterface& DSP() { +[[nodiscard]] inline AudioCore::DspInterface& DSP() { return System::GetInstance().DSP(); }