summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Liam2023-03-06 20:57:06 -0500
committerGravatar Liam2023-03-12 22:06:53 -0400
commit8d1f5bfbd2f25b6d0970161bc3061db42f83789e (patch)
tree095e216d9ea0f49a943b55f02f5e8b60c6ff3186 /src
parentkernel: convert KConditionVariable, KLightConditionVariable, KLightLock (diff)
downloadyuzu-8d1f5bfbd2f25b6d0970161bc3061db42f83789e.tar.gz
yuzu-8d1f5bfbd2f25b6d0970161bc3061db42f83789e.tar.xz
yuzu-8d1f5bfbd2f25b6d0970161bc3061db42f83789e.zip
kernel: remove KLinkedList
Diffstat (limited to 'src')
-rw-r--r--src/core/CMakeLists.txt1
-rw-r--r--src/core/hle/kernel/k_condition_variable.cpp1
-rw-r--r--src/core/hle/kernel/k_linked_list.h238
-rw-r--r--src/core/hle/kernel/kernel.cpp4
-rw-r--r--src/core/hle/kernel/kernel.h1
5 files changed, 0 insertions, 245 deletions
diff --git a/src/core/CMakeLists.txt b/src/core/CMakeLists.txt
index 75e0c4f38..c847fe824 100644
--- a/src/core/CMakeLists.txt
+++ b/src/core/CMakeLists.txt
@@ -211,7 +211,6 @@ add_library(core STATIC
211 hle/kernel/k_light_condition_variable.h 211 hle/kernel/k_light_condition_variable.h
212 hle/kernel/k_light_lock.cpp 212 hle/kernel/k_light_lock.cpp
213 hle/kernel/k_light_lock.h 213 hle/kernel/k_light_lock.h
214 hle/kernel/k_linked_list.h
215 hle/kernel/k_memory_block.h 214 hle/kernel/k_memory_block.h
216 hle/kernel/k_memory_block_manager.cpp 215 hle/kernel/k_memory_block_manager.cpp
217 hle/kernel/k_memory_block_manager.h 216 hle/kernel/k_memory_block_manager.h
diff --git a/src/core/hle/kernel/k_condition_variable.cpp b/src/core/hle/kernel/k_condition_variable.cpp
index b75957688..0dc01f6aa 100644
--- a/src/core/hle/kernel/k_condition_variable.cpp
+++ b/src/core/hle/kernel/k_condition_variable.cpp
@@ -4,7 +4,6 @@
4#include "core/arm/exclusive_monitor.h" 4#include "core/arm/exclusive_monitor.h"
5#include "core/core.h" 5#include "core/core.h"
6#include "core/hle/kernel/k_condition_variable.h" 6#include "core/hle/kernel/k_condition_variable.h"
7#include "core/hle/kernel/k_linked_list.h"
8#include "core/hle/kernel/k_process.h" 7#include "core/hle/kernel/k_process.h"
9#include "core/hle/kernel/k_scheduler.h" 8#include "core/hle/kernel/k_scheduler.h"
10#include "core/hle/kernel/k_scoped_scheduler_lock_and_sleep.h" 9#include "core/hle/kernel/k_scoped_scheduler_lock_and_sleep.h"
diff --git a/src/core/hle/kernel/k_linked_list.h b/src/core/hle/kernel/k_linked_list.h
deleted file mode 100644
index 29ebd16b7..000000000
--- a/src/core/hle/kernel/k_linked_list.h
+++ /dev/null
@@ -1,238 +0,0 @@
1// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#pragma once
5
6#include <boost/intrusive/list.hpp>
7
8#include "common/assert.h"
9#include "core/hle/kernel/slab_helpers.h"
10
11namespace Kernel {
12
13class KernelCore;
14
15class KLinkedListNode : public boost::intrusive::list_base_hook<>,
16 public KSlabAllocated<KLinkedListNode> {
17
18public:
19 explicit KLinkedListNode(KernelCore&) {}
20 KLinkedListNode() = default;
21
22 void Initialize(void* it) {
23 m_item = it;
24 }
25
26 void* GetItem() const {
27 return m_item;
28 }
29
30private:
31 void* m_item = nullptr;
32};
33
34template <typename T>
35class KLinkedList : private boost::intrusive::list<KLinkedListNode> {
36private:
37 using BaseList = boost::intrusive::list<KLinkedListNode>;
38
39public:
40 template <bool Const>
41 class Iterator;
42
43 using value_type = T;
44 using size_type = size_t;
45 using difference_type = ptrdiff_t;
46 using pointer = value_type*;
47 using const_pointer = const value_type*;
48 using reference = value_type&;
49 using const_reference = const value_type&;
50 using iterator = Iterator<false>;
51 using const_iterator = Iterator<true>;
52 using reverse_iterator = std::reverse_iterator<iterator>;
53 using const_reverse_iterator = std::reverse_iterator<const_iterator>;
54
55 template <bool Const>
56 class Iterator {
57 private:
58 using BaseIterator = BaseList::iterator;
59 friend class KLinkedList;
60
61 public:
62 using iterator_category = std::bidirectional_iterator_tag;
63 using value_type = typename KLinkedList::value_type;
64 using difference_type = typename KLinkedList::difference_type;
65 using pointer = std::conditional_t<Const, KLinkedList::const_pointer, KLinkedList::pointer>;
66 using reference =
67 std::conditional_t<Const, KLinkedList::const_reference, KLinkedList::reference>;
68
69 public:
70 explicit Iterator(BaseIterator it) : m_base_it(it) {}
71
72 pointer GetItem() const {
73 return static_cast<pointer>(m_base_it->GetItem());
74 }
75
76 bool operator==(const Iterator& rhs) const {
77 return m_base_it == rhs.m_base_it;
78 }
79
80 bool operator!=(const Iterator& rhs) const {
81 return !(*this == rhs);
82 }
83
84 pointer operator->() const {
85 return this->GetItem();
86 }
87
88 reference operator*() const {
89 return *this->GetItem();
90 }
91
92 Iterator& operator++() {
93 ++m_base_it;
94 return *this;
95 }
96
97 Iterator& operator--() {
98 --m_base_it;
99 return *this;
100 }
101
102 Iterator operator++(int) {
103 const Iterator it{*this};
104 ++(*this);
105 return it;
106 }
107
108 Iterator operator--(int) {
109 const Iterator it{*this};
110 --(*this);
111 return it;
112 }
113
114 operator Iterator<true>() const {
115 return Iterator<true>(m_base_it);
116 }
117
118 private:
119 BaseIterator m_base_it;
120 };
121
122public:
123 constexpr KLinkedList(KernelCore& kernel_) : BaseList(), kernel{kernel_} {}
124
125 ~KLinkedList() {
126 // Erase all elements.
127 for (auto it = begin(); it != end(); it = erase(it)) {
128 }
129
130 // Ensure we succeeded.
131 ASSERT(this->empty());
132 }
133
134 // Iterator accessors.
135 iterator begin() {
136 return iterator(BaseList::begin());
137 }
138
139 const_iterator begin() const {
140 return const_iterator(BaseList::begin());
141 }
142
143 iterator end() {
144 return iterator(BaseList::end());
145 }
146
147 const_iterator end() const {
148 return const_iterator(BaseList::end());
149 }
150
151 const_iterator cbegin() const {
152 return this->begin();
153 }
154
155 const_iterator cend() const {
156 return this->end();
157 }
158
159 reverse_iterator rbegin() {
160 return reverse_iterator(this->end());
161 }
162
163 const_reverse_iterator rbegin() const {
164 return const_reverse_iterator(this->end());
165 }
166
167 reverse_iterator rend() {
168 return reverse_iterator(this->begin());
169 }
170
171 const_reverse_iterator rend() const {
172 return const_reverse_iterator(this->begin());
173 }
174
175 const_reverse_iterator crbegin() const {
176 return this->rbegin();
177 }
178
179 const_reverse_iterator crend() const {
180 return this->rend();
181 }
182
183 // Content management.
184 using BaseList::empty;
185 using BaseList::size;
186
187 reference back() {
188 return *(--this->end());
189 }
190
191 const_reference back() const {
192 return *(--this->end());
193 }
194
195 reference front() {
196 return *this->begin();
197 }
198
199 const_reference front() const {
200 return *this->begin();
201 }
202
203 iterator insert(const_iterator pos, reference ref) {
204 KLinkedListNode* new_node = KLinkedListNode::Allocate(kernel);
205 ASSERT(new_node != nullptr);
206 new_node->Initialize(std::addressof(ref));
207 return iterator(BaseList::insert(pos.m_base_it, *new_node));
208 }
209
210 void push_back(reference ref) {
211 this->insert(this->end(), ref);
212 }
213
214 void push_front(reference ref) {
215 this->insert(this->begin(), ref);
216 }
217
218 void pop_back() {
219 this->erase(--this->end());
220 }
221
222 void pop_front() {
223 this->erase(this->begin());
224 }
225
226 iterator erase(const iterator pos) {
227 KLinkedListNode* freed_node = std::addressof(*pos.m_base_it);
228 iterator ret = iterator(BaseList::erase(pos.m_base_it));
229 KLinkedListNode::Free(kernel, freed_node);
230
231 return ret;
232 }
233
234private:
235 KernelCore& kernel;
236};
237
238} // namespace Kernel
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp
index 59f832a3d..c236e9976 100644
--- a/src/core/hle/kernel/kernel.cpp
+++ b/src/core/hle/kernel/kernel.cpp
@@ -1320,7 +1320,6 @@ const Core::System& KernelCore::System() const {
1320struct KernelCore::SlabHeapContainer { 1320struct KernelCore::SlabHeapContainer {
1321 KSlabHeap<KClientSession> client_session; 1321 KSlabHeap<KClientSession> client_session;
1322 KSlabHeap<KEvent> event; 1322 KSlabHeap<KEvent> event;
1323 KSlabHeap<KLinkedListNode> linked_list_node;
1324 KSlabHeap<KPort> port; 1323 KSlabHeap<KPort> port;
1325 KSlabHeap<KProcess> process; 1324 KSlabHeap<KProcess> process;
1326 KSlabHeap<KResourceLimit> resource_limit; 1325 KSlabHeap<KResourceLimit> resource_limit;
@@ -1347,8 +1346,6 @@ KSlabHeap<T>& KernelCore::SlabHeap() {
1347 return slab_heap_container->client_session; 1346 return slab_heap_container->client_session;
1348 } else if constexpr (std::is_same_v<T, KEvent>) { 1347 } else if constexpr (std::is_same_v<T, KEvent>) {
1349 return slab_heap_container->event; 1348 return slab_heap_container->event;
1350 } else if constexpr (std::is_same_v<T, KLinkedListNode>) {
1351 return slab_heap_container->linked_list_node;
1352 } else if constexpr (std::is_same_v<T, KPort>) { 1349 } else if constexpr (std::is_same_v<T, KPort>) {
1353 return slab_heap_container->port; 1350 return slab_heap_container->port;
1354 } else if constexpr (std::is_same_v<T, KProcess>) { 1351 } else if constexpr (std::is_same_v<T, KProcess>) {
@@ -1390,7 +1387,6 @@ KSlabHeap<T>& KernelCore::SlabHeap() {
1390 1387
1391template KSlabHeap<KClientSession>& KernelCore::SlabHeap(); 1388template KSlabHeap<KClientSession>& KernelCore::SlabHeap();
1392template KSlabHeap<KEvent>& KernelCore::SlabHeap(); 1389template KSlabHeap<KEvent>& KernelCore::SlabHeap();
1393template KSlabHeap<KLinkedListNode>& KernelCore::SlabHeap();
1394template KSlabHeap<KPort>& KernelCore::SlabHeap(); 1390template KSlabHeap<KPort>& KernelCore::SlabHeap();
1395template KSlabHeap<KProcess>& KernelCore::SlabHeap(); 1391template KSlabHeap<KProcess>& KernelCore::SlabHeap();
1396template KSlabHeap<KResourceLimit>& KernelCore::SlabHeap(); 1392template KSlabHeap<KResourceLimit>& KernelCore::SlabHeap();
diff --git a/src/core/hle/kernel/kernel.h b/src/core/hle/kernel/kernel.h
index 1b380a07b..183a4d227 100644
--- a/src/core/hle/kernel/kernel.h
+++ b/src/core/hle/kernel/kernel.h
@@ -47,7 +47,6 @@ class KEvent;
47class KEventInfo; 47class KEventInfo;
48class KHandleTable; 48class KHandleTable;
49class KHardwareTimer; 49class KHardwareTimer;
50class KLinkedListNode;
51class KMemoryLayout; 50class KMemoryLayout;
52class KMemoryManager; 51class KMemoryManager;
53class KObjectName; 52class KObjectName;