mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-10-30 15:39:02 -05:00 
			
		
		
		
	Merge pull request #894 from lioncash/object
kernel: Move object class to its own source files
This commit is contained in:
		| @@ -9,7 +9,7 @@ | ||||
| #include "common/common_types.h" | ||||
| #include "core/core.h" | ||||
| #include "core/hle/kernel/errors.h" | ||||
| #include "core/hle/kernel/kernel.h" | ||||
| #include "core/hle/kernel/object.h" | ||||
| #include "core/hle/kernel/process.h" | ||||
| #include "core/hle/kernel/thread.h" | ||||
| #include "core/hle/result.h" | ||||
|   | ||||
| @@ -8,7 +8,7 @@ | ||||
| #include "core/hle/kernel/client_session.h" | ||||
| #include "core/hle/kernel/errors.h" | ||||
| #include "core/hle/kernel/hle_ipc.h" | ||||
| #include "core/hle/kernel/kernel.h" | ||||
| #include "core/hle/kernel/object.h" | ||||
| #include "core/hle/kernel/server_port.h" | ||||
| #include "core/hle/kernel/server_session.h" | ||||
|  | ||||
|   | ||||
| @@ -6,7 +6,7 @@ | ||||
|  | ||||
| #include <string> | ||||
| #include "common/common_types.h" | ||||
| #include "core/hle/kernel/kernel.h" | ||||
| #include "core/hle/kernel/object.h" | ||||
| #include "core/hle/result.h" | ||||
|  | ||||
| namespace Kernel { | ||||
|   | ||||
| @@ -7,7 +7,7 @@ | ||||
| #include <memory> | ||||
| #include <string> | ||||
| #include "common/common_types.h" | ||||
| #include "core/hle/kernel/kernel.h" | ||||
| #include "core/hle/kernel/object.h" | ||||
| #include "core/hle/result.h" | ||||
|  | ||||
| namespace Kernel { | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
| #include <algorithm> | ||||
| #include "common/assert.h" | ||||
| #include "core/hle/kernel/event.h" | ||||
| #include "core/hle/kernel/kernel.h" | ||||
| #include "core/hle/kernel/object.h" | ||||
| #include "core/hle/kernel/thread.h" | ||||
|  | ||||
| namespace Kernel { | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
| #pragma once | ||||
|  | ||||
| #include "common/common_types.h" | ||||
| #include "core/hle/kernel/kernel.h" | ||||
| #include "core/hle/kernel/object.h" | ||||
| #include "core/hle/kernel/wait_object.h" | ||||
|  | ||||
| namespace Kernel { | ||||
|   | ||||
| @@ -8,7 +8,6 @@ | ||||
| #include "core/core.h" | ||||
| #include "core/hle/kernel/errors.h" | ||||
| #include "core/hle/kernel/handle_table.h" | ||||
| #include "core/hle/kernel/kernel.h" | ||||
| #include "core/hle/kernel/process.h" | ||||
| #include "core/hle/kernel/thread.h" | ||||
|  | ||||
|   | ||||
| @@ -7,7 +7,7 @@ | ||||
| #include <array> | ||||
| #include <cstddef> | ||||
| #include "common/common_types.h" | ||||
| #include "core/hle/kernel/kernel.h" | ||||
| #include "core/hle/kernel/object.h" | ||||
| #include "core/hle/result.h" | ||||
|  | ||||
| namespace Kernel { | ||||
|   | ||||
| @@ -3,17 +3,21 @@ | ||||
| // Refer to the license.txt file included. | ||||
|  | ||||
| #include <algorithm> | ||||
| #include <array> | ||||
| #include <sstream> | ||||
| #include <utility> | ||||
|  | ||||
| #include <boost/range/algorithm_ext/erase.hpp> | ||||
|  | ||||
| #include "common/assert.h" | ||||
| #include "common/common_funcs.h" | ||||
| #include "common/common_types.h" | ||||
| #include "common/logging/log.h" | ||||
| #include "core/hle/ipc_helpers.h" | ||||
| #include "core/hle/kernel/event.h" | ||||
| #include "core/hle/kernel/handle_table.h" | ||||
| #include "core/hle/kernel/hle_ipc.h" | ||||
| #include "core/hle/kernel/kernel.h" | ||||
| #include "core/hle/kernel/object.h" | ||||
| #include "core/hle/kernel/process.h" | ||||
| #include "core/hle/kernel/server_session.h" | ||||
| #include "core/memory.h" | ||||
|   | ||||
| @@ -13,7 +13,7 @@ | ||||
| #include "common/common_types.h" | ||||
| #include "common/swap.h" | ||||
| #include "core/hle/ipc.h" | ||||
| #include "core/hle/kernel/kernel.h" | ||||
| #include "core/hle/kernel/object.h" | ||||
| #include "core/hle/kernel/server_session.h" | ||||
| #include "core/hle/kernel/thread.h" | ||||
|  | ||||
|   | ||||
| @@ -4,120 +4,10 @@ | ||||
|  | ||||
| #pragma once | ||||
|  | ||||
| #include <cstddef> | ||||
| #include <string> | ||||
| #include <utility> | ||||
| #include <boost/smart_ptr/intrusive_ptr.hpp> | ||||
| #include "common/assert.h" | ||||
| #include "common/common_types.h" | ||||
|  | ||||
| namespace Kernel { | ||||
|  | ||||
| using Handle = u32; | ||||
|  | ||||
| enum class HandleType : u32 { | ||||
|     Unknown, | ||||
|     Event, | ||||
|     SharedMemory, | ||||
|     Thread, | ||||
|     Process, | ||||
|     AddressArbiter, | ||||
|     Timer, | ||||
|     ResourceLimit, | ||||
|     CodeSet, | ||||
|     ClientPort, | ||||
|     ServerPort, | ||||
|     ClientSession, | ||||
|     ServerSession, | ||||
| }; | ||||
|  | ||||
| enum class ResetType { | ||||
|     OneShot, | ||||
|     Sticky, | ||||
|     Pulse, | ||||
| }; | ||||
|  | ||||
| class Object : NonCopyable { | ||||
| public: | ||||
|     virtual ~Object() {} | ||||
|  | ||||
|     /// Returns a unique identifier for the object. For debugging purposes only. | ||||
|     unsigned int GetObjectId() const { | ||||
|         return object_id; | ||||
|     } | ||||
|  | ||||
|     virtual std::string GetTypeName() const { | ||||
|         return "[BAD KERNEL OBJECT TYPE]"; | ||||
|     } | ||||
|     virtual std::string GetName() const { | ||||
|         return "[UNKNOWN KERNEL OBJECT]"; | ||||
|     } | ||||
|     virtual Kernel::HandleType GetHandleType() const = 0; | ||||
|  | ||||
|     /** | ||||
|      * Check if a thread can wait on the object | ||||
|      * @return True if a thread can wait on the object, otherwise false | ||||
|      */ | ||||
|     bool IsWaitable() const { | ||||
|         switch (GetHandleType()) { | ||||
|         case HandleType::Event: | ||||
|         case HandleType::Thread: | ||||
|         case HandleType::Timer: | ||||
|         case HandleType::ServerPort: | ||||
|         case HandleType::ServerSession: | ||||
|             return true; | ||||
|  | ||||
|         case HandleType::Unknown: | ||||
|         case HandleType::SharedMemory: | ||||
|         case HandleType::Process: | ||||
|         case HandleType::AddressArbiter: | ||||
|         case HandleType::ResourceLimit: | ||||
|         case HandleType::CodeSet: | ||||
|         case HandleType::ClientPort: | ||||
|         case HandleType::ClientSession: | ||||
|             return false; | ||||
|         } | ||||
|  | ||||
|         UNREACHABLE(); | ||||
|     } | ||||
|  | ||||
| public: | ||||
|     static unsigned int next_object_id; | ||||
|  | ||||
| private: | ||||
|     friend void intrusive_ptr_add_ref(Object*); | ||||
|     friend void intrusive_ptr_release(Object*); | ||||
|  | ||||
|     unsigned int ref_count = 0; | ||||
|     unsigned int object_id = next_object_id++; | ||||
| }; | ||||
|  | ||||
| // Special functions used by boost::instrusive_ptr to do automatic ref-counting | ||||
| inline void intrusive_ptr_add_ref(Object* object) { | ||||
|     ++object->ref_count; | ||||
| } | ||||
|  | ||||
| inline void intrusive_ptr_release(Object* object) { | ||||
|     if (--object->ref_count == 0) { | ||||
|         delete object; | ||||
|     } | ||||
| } | ||||
|  | ||||
| template <typename T> | ||||
| using SharedPtr = boost::intrusive_ptr<T>; | ||||
|  | ||||
| /** | ||||
|  * Attempts to downcast the given Object pointer to a pointer to T. | ||||
|  * @return Derived pointer to the object, or `nullptr` if `object` isn't of type T. | ||||
|  */ | ||||
| template <typename T> | ||||
| inline SharedPtr<T> DynamicObjectCast(SharedPtr<Object> object) { | ||||
|     if (object != nullptr && object->GetHandleType() == T::HANDLE_TYPE) { | ||||
|         return boost::static_pointer_cast<T>(std::move(object)); | ||||
|     } | ||||
|     return nullptr; | ||||
| } | ||||
|  | ||||
| /// Initialize the kernel with the specified system mode. | ||||
| void Init(u32 system_mode); | ||||
|  | ||||
|   | ||||
| @@ -12,8 +12,8 @@ | ||||
| #include "core/core.h" | ||||
| #include "core/hle/kernel/errors.h" | ||||
| #include "core/hle/kernel/handle_table.h" | ||||
| #include "core/hle/kernel/kernel.h" | ||||
| #include "core/hle/kernel/mutex.h" | ||||
| #include "core/hle/kernel/object.h" | ||||
| #include "core/hle/kernel/thread.h" | ||||
| #include "core/hle/result.h" | ||||
|  | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
| #pragma once | ||||
|  | ||||
| #include "common/common_types.h" | ||||
| #include "core/hle/kernel/kernel.h" | ||||
| #include "core/hle/kernel/object.h" | ||||
|  | ||||
| union ResultCode; | ||||
|  | ||||
|   | ||||
							
								
								
									
										35
									
								
								src/core/hle/kernel/object.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								src/core/hle/kernel/object.cpp
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | ||||
| // Copyright 2018 Citra Emulator Project | ||||
| // Licensed under GPLv2 or any later version | ||||
| // Refer to the license.txt file included. | ||||
|  | ||||
| #include "common/assert.h" | ||||
| #include "core/hle/kernel/object.h" | ||||
|  | ||||
| namespace Kernel { | ||||
|  | ||||
| Object::~Object() = default; | ||||
|  | ||||
| bool Object::IsWaitable() const { | ||||
|     switch (GetHandleType()) { | ||||
|     case HandleType::Event: | ||||
|     case HandleType::Thread: | ||||
|     case HandleType::Timer: | ||||
|     case HandleType::ServerPort: | ||||
|     case HandleType::ServerSession: | ||||
|         return true; | ||||
|  | ||||
|     case HandleType::Unknown: | ||||
|     case HandleType::SharedMemory: | ||||
|     case HandleType::Process: | ||||
|     case HandleType::AddressArbiter: | ||||
|     case HandleType::ResourceLimit: | ||||
|     case HandleType::CodeSet: | ||||
|     case HandleType::ClientPort: | ||||
|     case HandleType::ClientSession: | ||||
|         return false; | ||||
|     } | ||||
|  | ||||
|     UNREACHABLE(); | ||||
| } | ||||
|  | ||||
| } // namespace Kernel | ||||
							
								
								
									
										100
									
								
								src/core/hle/kernel/object.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								src/core/hle/kernel/object.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,100 @@ | ||||
| // Copyright 2018 Citra Emulator Project | ||||
| // Licensed under GPLv2 or any later version | ||||
| // Refer to the license.txt file included. | ||||
|  | ||||
| #pragma once | ||||
|  | ||||
| #include <string> | ||||
| #include <utility> | ||||
|  | ||||
| #include <boost/smart_ptr/intrusive_ptr.hpp> | ||||
|  | ||||
| #include "common/common_types.h" | ||||
|  | ||||
| namespace Kernel { | ||||
|  | ||||
| using Handle = u32; | ||||
|  | ||||
| enum class HandleType : u32 { | ||||
|     Unknown, | ||||
|     Event, | ||||
|     SharedMemory, | ||||
|     Thread, | ||||
|     Process, | ||||
|     AddressArbiter, | ||||
|     Timer, | ||||
|     ResourceLimit, | ||||
|     CodeSet, | ||||
|     ClientPort, | ||||
|     ServerPort, | ||||
|     ClientSession, | ||||
|     ServerSession, | ||||
| }; | ||||
|  | ||||
| enum class ResetType { | ||||
|     OneShot, | ||||
|     Sticky, | ||||
|     Pulse, | ||||
| }; | ||||
|  | ||||
| class Object : NonCopyable { | ||||
| public: | ||||
|     virtual ~Object(); | ||||
|  | ||||
|     /// Returns a unique identifier for the object. For debugging purposes only. | ||||
|     unsigned int GetObjectId() const { | ||||
|         return object_id; | ||||
|     } | ||||
|  | ||||
|     virtual std::string GetTypeName() const { | ||||
|         return "[BAD KERNEL OBJECT TYPE]"; | ||||
|     } | ||||
|     virtual std::string GetName() const { | ||||
|         return "[UNKNOWN KERNEL OBJECT]"; | ||||
|     } | ||||
|     virtual HandleType GetHandleType() const = 0; | ||||
|  | ||||
|     /** | ||||
|      * Check if a thread can wait on the object | ||||
|      * @return True if a thread can wait on the object, otherwise false | ||||
|      */ | ||||
|     bool IsWaitable() const; | ||||
|  | ||||
| public: | ||||
|     static unsigned int next_object_id; | ||||
|  | ||||
| private: | ||||
|     friend void intrusive_ptr_add_ref(Object*); | ||||
|     friend void intrusive_ptr_release(Object*); | ||||
|  | ||||
|     unsigned int ref_count = 0; | ||||
|     unsigned int object_id = next_object_id++; | ||||
| }; | ||||
|  | ||||
| // Special functions used by boost::instrusive_ptr to do automatic ref-counting | ||||
| inline void intrusive_ptr_add_ref(Object* object) { | ||||
|     ++object->ref_count; | ||||
| } | ||||
|  | ||||
| inline void intrusive_ptr_release(Object* object) { | ||||
|     if (--object->ref_count == 0) { | ||||
|         delete object; | ||||
|     } | ||||
| } | ||||
|  | ||||
| template <typename T> | ||||
| using SharedPtr = boost::intrusive_ptr<T>; | ||||
|  | ||||
| /** | ||||
|  * Attempts to downcast the given Object pointer to a pointer to T. | ||||
|  * @return Derived pointer to the object, or `nullptr` if `object` isn't of type T. | ||||
|  */ | ||||
| template <typename T> | ||||
| inline SharedPtr<T> DynamicObjectCast(SharedPtr<Object> object) { | ||||
|     if (object != nullptr && object->GetHandleType() == T::HANDLE_TYPE) { | ||||
|         return boost::static_pointer_cast<T>(std::move(object)); | ||||
|     } | ||||
|     return nullptr; | ||||
| } | ||||
|  | ||||
| } // namespace Kernel | ||||
| @@ -12,7 +12,7 @@ | ||||
| #include <boost/container/static_vector.hpp> | ||||
| #include "common/bit_field.h" | ||||
| #include "common/common_types.h" | ||||
| #include "core/hle/kernel/kernel.h" | ||||
| #include "core/hle/kernel/object.h" | ||||
| #include "core/hle/kernel/thread.h" | ||||
| #include "core/hle/kernel/vm_manager.h" | ||||
|  | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
| #pragma once | ||||
|  | ||||
| #include "common/common_types.h" | ||||
| #include "core/hle/kernel/kernel.h" | ||||
| #include "core/hle/kernel/object.h" | ||||
|  | ||||
| namespace Kernel { | ||||
|  | ||||
|   | ||||
| @@ -8,6 +8,7 @@ | ||||
| #include <vector> | ||||
| #include "common/common_types.h" | ||||
| #include "common/thread_queue_list.h" | ||||
| #include "core/hle/kernel/object.h" | ||||
| #include "core/hle/kernel/thread.h" | ||||
|  | ||||
| class ARM_Interface; | ||||
|   | ||||
| @@ -6,7 +6,7 @@ | ||||
| #include "common/assert.h" | ||||
| #include "core/hle/kernel/client_port.h" | ||||
| #include "core/hle/kernel/errors.h" | ||||
| #include "core/hle/kernel/kernel.h" | ||||
| #include "core/hle/kernel/object.h" | ||||
| #include "core/hle/kernel/server_port.h" | ||||
| #include "core/hle/kernel/server_session.h" | ||||
| #include "core/hle/kernel/thread.h" | ||||
|   | ||||
| @@ -9,7 +9,7 @@ | ||||
| #include <tuple> | ||||
| #include <vector> | ||||
| #include "common/common_types.h" | ||||
| #include "core/hle/kernel/kernel.h" | ||||
| #include "core/hle/kernel/object.h" | ||||
| #include "core/hle/kernel/wait_object.h" | ||||
|  | ||||
| namespace Kernel { | ||||
|   | ||||
| @@ -9,7 +9,7 @@ | ||||
| #include <vector> | ||||
|  | ||||
| #include "common/common_types.h" | ||||
| #include "core/hle/kernel/kernel.h" | ||||
| #include "core/hle/kernel/object.h" | ||||
| #include "core/hle/kernel/wait_object.h" | ||||
| #include "core/hle/result.h" | ||||
|  | ||||
|   | ||||
| @@ -4,7 +4,7 @@ | ||||
|  | ||||
| #pragma once | ||||
|  | ||||
| #include "core/hle/kernel/kernel.h" | ||||
| #include "core/hle/kernel/object.h" | ||||
|  | ||||
| namespace Kernel { | ||||
|  | ||||
|   | ||||
| @@ -9,7 +9,7 @@ | ||||
| #include <vector> | ||||
|  | ||||
| #include "common/common_types.h" | ||||
| #include "core/hle/kernel/kernel.h" | ||||
| #include "core/hle/kernel/object.h" | ||||
| #include "core/hle/kernel/process.h" | ||||
| #include "core/hle/result.h" | ||||
|  | ||||
|   | ||||
| @@ -20,8 +20,8 @@ | ||||
| #include "core/core_timing_util.h" | ||||
| #include "core/hle/kernel/errors.h" | ||||
| #include "core/hle/kernel/handle_table.h" | ||||
| #include "core/hle/kernel/kernel.h" | ||||
| #include "core/hle/kernel/memory.h" | ||||
| #include "core/hle/kernel/object.h" | ||||
| #include "core/hle/kernel/process.h" | ||||
| #include "core/hle/kernel/thread.h" | ||||
| #include "core/hle/result.h" | ||||
|   | ||||
| @@ -11,7 +11,7 @@ | ||||
|  | ||||
| #include "common/common_types.h" | ||||
| #include "core/arm/arm_interface.h" | ||||
| #include "core/hle/kernel/kernel.h" | ||||
| #include "core/hle/kernel/object.h" | ||||
| #include "core/hle/kernel/wait_object.h" | ||||
| #include "core/hle/result.h" | ||||
|  | ||||
|   | ||||
| @@ -8,7 +8,7 @@ | ||||
| #include "core/core_timing.h" | ||||
| #include "core/core_timing_util.h" | ||||
| #include "core/hle/kernel/handle_table.h" | ||||
| #include "core/hle/kernel/kernel.h" | ||||
| #include "core/hle/kernel/object.h" | ||||
| #include "core/hle/kernel/thread.h" | ||||
| #include "core/hle/kernel/timer.h" | ||||
|  | ||||
|   | ||||
| @@ -5,7 +5,7 @@ | ||||
| #pragma once | ||||
|  | ||||
| #include "common/common_types.h" | ||||
| #include "core/hle/kernel/kernel.h" | ||||
| #include "core/hle/kernel/object.h" | ||||
| #include "core/hle/kernel/wait_object.h" | ||||
|  | ||||
| namespace Kernel { | ||||
|   | ||||
| @@ -5,8 +5,7 @@ | ||||
| #include <algorithm> | ||||
| #include "common/assert.h" | ||||
| #include "common/logging/log.h" | ||||
| #include "core/hle/kernel/kernel.h" | ||||
| #include "core/hle/kernel/memory.h" | ||||
| #include "core/hle/kernel/object.h" | ||||
| #include "core/hle/kernel/process.h" | ||||
| #include "core/hle/kernel/thread.h" | ||||
| #include "core/hle/kernel/timer.h" | ||||
|   | ||||
| @@ -7,7 +7,7 @@ | ||||
| #include <vector> | ||||
| #include <boost/smart_ptr/intrusive_ptr.hpp> | ||||
| #include "common/common_types.h" | ||||
| #include "core/hle/kernel/kernel.h" | ||||
| #include "core/hle/kernel/object.h" | ||||
|  | ||||
| namespace Kernel { | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 bunnei
					bunnei