// SPDX-License-Identifier: MPL-2.0 // Copyright © 2020 Skyline Team and Contributors (https://github.com/skyline-emu/) #pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace skyline { class Settings; namespace nce { class NCE; struct ThreadContext; } namespace jit { class Jit32; } class JvmManager; namespace gpu { class GPU; } namespace soc { class SOC; } namespace kernel { namespace type { class KProcess; class KThread; } class Scheduler; class OS; } namespace audio { class Audio; } namespace input { class Input; } namespace loader { class Loader; } /** * @brief The state of the entire emulator is contained within this class, all objects related to emulation are tied into it */ struct DeviceState { DeviceState(kernel::OS *os, std::shared_ptr jvmManager, std::shared_ptr settings); ~DeviceState(); kernel::OS *os; std::shared_ptr jvm; std::shared_ptr settings; std::shared_ptr loader; std::shared_ptr nce; std::shared_ptr jit32; std::shared_ptr process{}; static thread_local inline std::shared_ptr thread{}; //!< The KThread of the thread which accesses this object std::shared_ptr gpu; std::shared_ptr soc; std::shared_ptr audio; std::shared_ptr scheduler; std::shared_ptr input; }; }