Просмотр исходного кода

Merge pull request #3363 from lioncash/unique_ptr

kernel/physical_core: Make use of std::unique_ptr instead of std::shared_ptr
bunnei 6 лет назад
Родитель
Сommit
6b5b01b29f

+ 0 - 2
src/core/cpu_manager.cpp

@@ -2,14 +2,12 @@
 // Licensed under GPLv2 or any later version
 // Licensed under GPLv2 or any later version
 // Refer to the license.txt file included.
 // Refer to the license.txt file included.
 
 
-#include "common/assert.h"
 #include "core/arm/exclusive_monitor.h"
 #include "core/arm/exclusive_monitor.h"
 #include "core/core.h"
 #include "core/core.h"
 #include "core/core_manager.h"
 #include "core/core_manager.h"
 #include "core/core_timing.h"
 #include "core/core_timing.h"
 #include "core/cpu_manager.h"
 #include "core/cpu_manager.h"
 #include "core/gdbstub/gdbstub.h"
 #include "core/gdbstub/gdbstub.h"
-#include "core/settings.h"
 
 
 namespace Core {
 namespace Core {
 
 

+ 4 - 4
src/core/hle/kernel/kernel.cpp

@@ -101,7 +101,7 @@ struct KernelCore::Impl {
     void Initialize(KernelCore& kernel) {
     void Initialize(KernelCore& kernel) {
         Shutdown();
         Shutdown();
 
 
-        InitializePhysicalCores(kernel);
+        InitializePhysicalCores();
         InitializeSystemResourceLimit(kernel);
         InitializeSystemResourceLimit(kernel);
         InitializeThreads();
         InitializeThreads();
         InitializePreemption();
         InitializePreemption();
@@ -131,14 +131,14 @@ struct KernelCore::Impl {
         }
         }
         cores.clear();
         cores.clear();
 
 
-        exclusive_monitor.reset(nullptr);
+        exclusive_monitor.reset();
     }
     }
 
 
-    void InitializePhysicalCores(KernelCore& kernel) {
+    void InitializePhysicalCores() {
         exclusive_monitor =
         exclusive_monitor =
             Core::MakeExclusiveMonitor(system.Memory(), global_scheduler.CpuCoresCount());
             Core::MakeExclusiveMonitor(system.Memory(), global_scheduler.CpuCoresCount());
         for (std::size_t i = 0; i < global_scheduler.CpuCoresCount(); i++) {
         for (std::size_t i = 0; i < global_scheduler.CpuCoresCount(); i++) {
-            cores.emplace_back(system, kernel, i, *exclusive_monitor);
+            cores.emplace_back(system, i, *exclusive_monitor);
         }
         }
     }
     }
 
 

+ 4 - 5
src/core/hle/kernel/physical_core.cpp

@@ -10,24 +10,23 @@
 #include "core/arm/exclusive_monitor.h"
 #include "core/arm/exclusive_monitor.h"
 #include "core/arm/unicorn/arm_unicorn.h"
 #include "core/arm/unicorn/arm_unicorn.h"
 #include "core/core.h"
 #include "core/core.h"
-#include "core/hle/kernel/kernel.h"
 #include "core/hle/kernel/physical_core.h"
 #include "core/hle/kernel/physical_core.h"
 #include "core/hle/kernel/scheduler.h"
 #include "core/hle/kernel/scheduler.h"
 #include "core/hle/kernel/thread.h"
 #include "core/hle/kernel/thread.h"
 
 
 namespace Kernel {
 namespace Kernel {
 
 
-PhysicalCore::PhysicalCore(Core::System& system, KernelCore& kernel, std::size_t id,
+PhysicalCore::PhysicalCore(Core::System& system, std::size_t id,
                            Core::ExclusiveMonitor& exclusive_monitor)
                            Core::ExclusiveMonitor& exclusive_monitor)
-    : core_index{id}, kernel{kernel} {
+    : core_index{id} {
 #ifdef ARCHITECTURE_x86_64
 #ifdef ARCHITECTURE_x86_64
-    arm_interface = std::make_shared<Core::ARM_Dynarmic>(system, exclusive_monitor, core_index);
+    arm_interface = std::make_unique<Core::ARM_Dynarmic>(system, exclusive_monitor, core_index);
 #else
 #else
     arm_interface = std::make_shared<Core::ARM_Unicorn>(system);
     arm_interface = std::make_shared<Core::ARM_Unicorn>(system);
     LOG_WARNING(Core, "CPU JIT requested, but Dynarmic not available");
     LOG_WARNING(Core, "CPU JIT requested, but Dynarmic not available");
 #endif
 #endif
 
 
-    scheduler = std::make_shared<Kernel::Scheduler>(system, *arm_interface, core_index);
+    scheduler = std::make_unique<Kernel::Scheduler>(system, *arm_interface, core_index);
 }
 }
 
 
 PhysicalCore::~PhysicalCore() = default;
 PhysicalCore::~PhysicalCore() = default;

+ 9 - 6
src/core/hle/kernel/physical_core.h

@@ -21,11 +21,15 @@ namespace Kernel {
 
 
 class PhysicalCore {
 class PhysicalCore {
 public:
 public:
-    PhysicalCore(Core::System& system, KernelCore& kernel, std::size_t id,
-                 Core::ExclusiveMonitor& exclusive_monitor);
-
+    PhysicalCore(Core::System& system, std::size_t id, Core::ExclusiveMonitor& exclusive_monitor);
     ~PhysicalCore();
     ~PhysicalCore();
 
 
+    PhysicalCore(const PhysicalCore&) = delete;
+    PhysicalCore& operator=(const PhysicalCore&) = delete;
+
+    PhysicalCore(PhysicalCore&&) = default;
+    PhysicalCore& operator=(PhysicalCore&&) = default;
+
     /// Execute current jit state
     /// Execute current jit state
     void Run();
     void Run();
     /// Execute a single instruction in current jit.
     /// Execute a single instruction in current jit.
@@ -66,9 +70,8 @@ public:
 
 
 private:
 private:
     std::size_t core_index;
     std::size_t core_index;
-    KernelCore& kernel;
-    std::shared_ptr<Core::ARM_Interface> arm_interface;
-    std::shared_ptr<Kernel::Scheduler> scheduler;
+    std::unique_ptr<Core::ARM_Interface> arm_interface;
+    std::unique_ptr<Kernel::Scheduler> scheduler;
 };
 };
 
 
 } // namespace Kernel
 } // namespace Kernel