kernel: remove KLinkedList
This commit is contained in:
		| @@ -211,7 +211,6 @@ add_library(core STATIC | ||||
|     hle/kernel/k_light_condition_variable.h | ||||
|     hle/kernel/k_light_lock.cpp | ||||
|     hle/kernel/k_light_lock.h | ||||
|     hle/kernel/k_linked_list.h | ||||
|     hle/kernel/k_memory_block.h | ||||
|     hle/kernel/k_memory_block_manager.cpp | ||||
|     hle/kernel/k_memory_block_manager.h | ||||
|   | ||||
| @@ -4,7 +4,6 @@ | ||||
| #include "core/arm/exclusive_monitor.h" | ||||
| #include "core/core.h" | ||||
| #include "core/hle/kernel/k_condition_variable.h" | ||||
| #include "core/hle/kernel/k_linked_list.h" | ||||
| #include "core/hle/kernel/k_process.h" | ||||
| #include "core/hle/kernel/k_scheduler.h" | ||||
| #include "core/hle/kernel/k_scoped_scheduler_lock_and_sleep.h" | ||||
|   | ||||
| @@ -1,238 +0,0 @@ | ||||
| // SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project | ||||
| // SPDX-License-Identifier: GPL-2.0-or-later | ||||
|  | ||||
| #pragma once | ||||
|  | ||||
| #include <boost/intrusive/list.hpp> | ||||
|  | ||||
| #include "common/assert.h" | ||||
| #include "core/hle/kernel/slab_helpers.h" | ||||
|  | ||||
| namespace Kernel { | ||||
|  | ||||
| class KernelCore; | ||||
|  | ||||
| class KLinkedListNode : public boost::intrusive::list_base_hook<>, | ||||
|                         public KSlabAllocated<KLinkedListNode> { | ||||
|  | ||||
| public: | ||||
|     explicit KLinkedListNode(KernelCore&) {} | ||||
|     KLinkedListNode() = default; | ||||
|  | ||||
|     void Initialize(void* it) { | ||||
|         m_item = it; | ||||
|     } | ||||
|  | ||||
|     void* GetItem() const { | ||||
|         return m_item; | ||||
|     } | ||||
|  | ||||
| private: | ||||
|     void* m_item = nullptr; | ||||
| }; | ||||
|  | ||||
| template <typename T> | ||||
| class KLinkedList : private boost::intrusive::list<KLinkedListNode> { | ||||
| private: | ||||
|     using BaseList = boost::intrusive::list<KLinkedListNode>; | ||||
|  | ||||
| public: | ||||
|     template <bool Const> | ||||
|     class Iterator; | ||||
|  | ||||
|     using value_type = T; | ||||
|     using size_type = size_t; | ||||
|     using difference_type = ptrdiff_t; | ||||
|     using pointer = value_type*; | ||||
|     using const_pointer = const value_type*; | ||||
|     using reference = value_type&; | ||||
|     using const_reference = const value_type&; | ||||
|     using iterator = Iterator<false>; | ||||
|     using const_iterator = Iterator<true>; | ||||
|     using reverse_iterator = std::reverse_iterator<iterator>; | ||||
|     using const_reverse_iterator = std::reverse_iterator<const_iterator>; | ||||
|  | ||||
|     template <bool Const> | ||||
|     class Iterator { | ||||
|     private: | ||||
|         using BaseIterator = BaseList::iterator; | ||||
|         friend class KLinkedList; | ||||
|  | ||||
|     public: | ||||
|         using iterator_category = std::bidirectional_iterator_tag; | ||||
|         using value_type = typename KLinkedList::value_type; | ||||
|         using difference_type = typename KLinkedList::difference_type; | ||||
|         using pointer = std::conditional_t<Const, KLinkedList::const_pointer, KLinkedList::pointer>; | ||||
|         using reference = | ||||
|             std::conditional_t<Const, KLinkedList::const_reference, KLinkedList::reference>; | ||||
|  | ||||
|     public: | ||||
|         explicit Iterator(BaseIterator it) : m_base_it(it) {} | ||||
|  | ||||
|         pointer GetItem() const { | ||||
|             return static_cast<pointer>(m_base_it->GetItem()); | ||||
|         } | ||||
|  | ||||
|         bool operator==(const Iterator& rhs) const { | ||||
|             return m_base_it == rhs.m_base_it; | ||||
|         } | ||||
|  | ||||
|         bool operator!=(const Iterator& rhs) const { | ||||
|             return !(*this == rhs); | ||||
|         } | ||||
|  | ||||
|         pointer operator->() const { | ||||
|             return this->GetItem(); | ||||
|         } | ||||
|  | ||||
|         reference operator*() const { | ||||
|             return *this->GetItem(); | ||||
|         } | ||||
|  | ||||
|         Iterator& operator++() { | ||||
|             ++m_base_it; | ||||
|             return *this; | ||||
|         } | ||||
|  | ||||
|         Iterator& operator--() { | ||||
|             --m_base_it; | ||||
|             return *this; | ||||
|         } | ||||
|  | ||||
|         Iterator operator++(int) { | ||||
|             const Iterator it{*this}; | ||||
|             ++(*this); | ||||
|             return it; | ||||
|         } | ||||
|  | ||||
|         Iterator operator--(int) { | ||||
|             const Iterator it{*this}; | ||||
|             --(*this); | ||||
|             return it; | ||||
|         } | ||||
|  | ||||
|         operator Iterator<true>() const { | ||||
|             return Iterator<true>(m_base_it); | ||||
|         } | ||||
|  | ||||
|     private: | ||||
|         BaseIterator m_base_it; | ||||
|     }; | ||||
|  | ||||
| public: | ||||
|     constexpr KLinkedList(KernelCore& kernel_) : BaseList(), kernel{kernel_} {} | ||||
|  | ||||
|     ~KLinkedList() { | ||||
|         // Erase all elements. | ||||
|         for (auto it = begin(); it != end(); it = erase(it)) { | ||||
|         } | ||||
|  | ||||
|         // Ensure we succeeded. | ||||
|         ASSERT(this->empty()); | ||||
|     } | ||||
|  | ||||
|     // Iterator accessors. | ||||
|     iterator begin() { | ||||
|         return iterator(BaseList::begin()); | ||||
|     } | ||||
|  | ||||
|     const_iterator begin() const { | ||||
|         return const_iterator(BaseList::begin()); | ||||
|     } | ||||
|  | ||||
|     iterator end() { | ||||
|         return iterator(BaseList::end()); | ||||
|     } | ||||
|  | ||||
|     const_iterator end() const { | ||||
|         return const_iterator(BaseList::end()); | ||||
|     } | ||||
|  | ||||
|     const_iterator cbegin() const { | ||||
|         return this->begin(); | ||||
|     } | ||||
|  | ||||
|     const_iterator cend() const { | ||||
|         return this->end(); | ||||
|     } | ||||
|  | ||||
|     reverse_iterator rbegin() { | ||||
|         return reverse_iterator(this->end()); | ||||
|     } | ||||
|  | ||||
|     const_reverse_iterator rbegin() const { | ||||
|         return const_reverse_iterator(this->end()); | ||||
|     } | ||||
|  | ||||
|     reverse_iterator rend() { | ||||
|         return reverse_iterator(this->begin()); | ||||
|     } | ||||
|  | ||||
|     const_reverse_iterator rend() const { | ||||
|         return const_reverse_iterator(this->begin()); | ||||
|     } | ||||
|  | ||||
|     const_reverse_iterator crbegin() const { | ||||
|         return this->rbegin(); | ||||
|     } | ||||
|  | ||||
|     const_reverse_iterator crend() const { | ||||
|         return this->rend(); | ||||
|     } | ||||
|  | ||||
|     // Content management. | ||||
|     using BaseList::empty; | ||||
|     using BaseList::size; | ||||
|  | ||||
|     reference back() { | ||||
|         return *(--this->end()); | ||||
|     } | ||||
|  | ||||
|     const_reference back() const { | ||||
|         return *(--this->end()); | ||||
|     } | ||||
|  | ||||
|     reference front() { | ||||
|         return *this->begin(); | ||||
|     } | ||||
|  | ||||
|     const_reference front() const { | ||||
|         return *this->begin(); | ||||
|     } | ||||
|  | ||||
|     iterator insert(const_iterator pos, reference ref) { | ||||
|         KLinkedListNode* new_node = KLinkedListNode::Allocate(kernel); | ||||
|         ASSERT(new_node != nullptr); | ||||
|         new_node->Initialize(std::addressof(ref)); | ||||
|         return iterator(BaseList::insert(pos.m_base_it, *new_node)); | ||||
|     } | ||||
|  | ||||
|     void push_back(reference ref) { | ||||
|         this->insert(this->end(), ref); | ||||
|     } | ||||
|  | ||||
|     void push_front(reference ref) { | ||||
|         this->insert(this->begin(), ref); | ||||
|     } | ||||
|  | ||||
|     void pop_back() { | ||||
|         this->erase(--this->end()); | ||||
|     } | ||||
|  | ||||
|     void pop_front() { | ||||
|         this->erase(this->begin()); | ||||
|     } | ||||
|  | ||||
|     iterator erase(const iterator pos) { | ||||
|         KLinkedListNode* freed_node = std::addressof(*pos.m_base_it); | ||||
|         iterator ret = iterator(BaseList::erase(pos.m_base_it)); | ||||
|         KLinkedListNode::Free(kernel, freed_node); | ||||
|  | ||||
|         return ret; | ||||
|     } | ||||
|  | ||||
| private: | ||||
|     KernelCore& kernel; | ||||
| }; | ||||
|  | ||||
| } // namespace Kernel | ||||
| @@ -1320,7 +1320,6 @@ const Core::System& KernelCore::System() const { | ||||
| struct KernelCore::SlabHeapContainer { | ||||
|     KSlabHeap<KClientSession> client_session; | ||||
|     KSlabHeap<KEvent> event; | ||||
|     KSlabHeap<KLinkedListNode> linked_list_node; | ||||
|     KSlabHeap<KPort> port; | ||||
|     KSlabHeap<KProcess> process; | ||||
|     KSlabHeap<KResourceLimit> resource_limit; | ||||
| @@ -1347,8 +1346,6 @@ KSlabHeap<T>& KernelCore::SlabHeap() { | ||||
|         return slab_heap_container->client_session; | ||||
|     } else if constexpr (std::is_same_v<T, KEvent>) { | ||||
|         return slab_heap_container->event; | ||||
|     } else if constexpr (std::is_same_v<T, KLinkedListNode>) { | ||||
|         return slab_heap_container->linked_list_node; | ||||
|     } else if constexpr (std::is_same_v<T, KPort>) { | ||||
|         return slab_heap_container->port; | ||||
|     } else if constexpr (std::is_same_v<T, KProcess>) { | ||||
| @@ -1390,7 +1387,6 @@ KSlabHeap<T>& KernelCore::SlabHeap() { | ||||
|  | ||||
| template KSlabHeap<KClientSession>& KernelCore::SlabHeap(); | ||||
| template KSlabHeap<KEvent>& KernelCore::SlabHeap(); | ||||
| template KSlabHeap<KLinkedListNode>& KernelCore::SlabHeap(); | ||||
| template KSlabHeap<KPort>& KernelCore::SlabHeap(); | ||||
| template KSlabHeap<KProcess>& KernelCore::SlabHeap(); | ||||
| template KSlabHeap<KResourceLimit>& KernelCore::SlabHeap(); | ||||
|   | ||||
| @@ -47,7 +47,6 @@ class KEvent; | ||||
| class KEventInfo; | ||||
| class KHandleTable; | ||||
| class KHardwareTimer; | ||||
| class KLinkedListNode; | ||||
| class KMemoryLayout; | ||||
| class KMemoryManager; | ||||
| class KObjectName; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user