From ff90ddbd2fe15ac7358c337b9abfd77085a3753a Mon Sep 17 00:00:00 2001 From: Nekotekina Date: Sun, 15 Mar 2015 12:20:29 +0300 Subject: [PATCH] IdManager cleaned --- rpcs3/Emu/IdManager.h | 85 +++++++++++++------------------------------ 1 file changed, 26 insertions(+), 59 deletions(-) diff --git a/rpcs3/Emu/IdManager.h b/rpcs3/Emu/IdManager.h index eddb77e483..eb1c83f3f7 100644 --- a/rpcs3/Emu/IdManager.h +++ b/rpcs3/Emu/IdManager.h @@ -29,48 +29,24 @@ enum IDType TYPE_OTHER, }; -class IDData -{ -protected: - void* m_ptr; - std::function m_destr; - -public: - IDData(void* ptr, std::function destr) - : m_ptr(ptr) - , m_destr(destr) - { - } - - ~IDData() - { - m_destr(m_ptr); - } - - template std::shared_ptr get() const - { - return *(std::shared_ptr*)m_ptr; - } -}; - -class ID +class ID final { const std::type_info& m_info; - IDData* m_data; + std::shared_ptr m_data; IDType m_type; public: - template - ID(std::shared_ptr& data, const IDType type) + template ID(std::shared_ptr& data, const IDType type) : m_info(typeid(T)) + , m_data(data) , m_type(type) { - m_data = new IDData(new std::shared_ptr(data), [](void *ptr) -> void { delete (std::shared_ptr*)ptr; }); } ID() - : m_info(typeid(nullptr_t)) + : m_info(typeid(void)) , m_data(nullptr) + , m_type(TYPE_OTHER) { } @@ -82,26 +58,19 @@ public: , m_type(right.m_type) { right.m_data = nullptr; + right.m_type = TYPE_OTHER; } ID& operator=(ID&& other) = delete; - ~ID() - { - if (m_data) - { - delete m_data; - } - } - const std::type_info& GetInfo() const { return m_info; } - IDData* GetData() const + template std::shared_ptr GetData() const { - return m_data; + return std::static_pointer_cast(m_data); } IDType GetType() const @@ -119,18 +88,9 @@ class IdManager std::set m_types[TYPE_OTHER]; std::mutex m_mtx_main; - u32 m_cur_id; + u32 m_cur_id = s_first_id; public: - IdManager() : m_cur_id(s_first_id) - { - } - - ~IdManager() - { - Clear(); - } - template bool CheckID(const u32 id) { std::lock_guard lock(m_mtx_main); @@ -161,13 +121,6 @@ public: return m_cur_id++; } - - ID& GetID(const u32 id) - { - std::lock_guard lock(m_mtx_main); - - return m_id_map[id]; - } template bool GetIDData(const u32 id, std::shared_ptr& result) { @@ -180,7 +133,7 @@ public: return false; } - result = f->second.GetData()->get(); + result = f->second.GetData(); return true; } @@ -196,7 +149,7 @@ public: return nullptr; } - return f->second.GetData()->get(); + return f->second.GetData(); } bool HasID(const u32 id) @@ -206,6 +159,20 @@ public: return m_id_map.find(id) != m_id_map.end(); } + IDType GetIDType(const u32 id) + { + std::lock_guard lock(m_mtx_main); + + auto item = m_id_map.find(id); + + if (item == m_id_map.end()) + { + return TYPE_OTHER; + } + + return item->second.GetType(); + } + template bool RemoveID(const u32 id) { std::lock_guard lock(m_mtx_main);