|
|
|
@ -260,15 +260,15 @@ public:
|
|
|
|
|
template <typename T>
|
|
|
|
|
KSlabHeap<T>& SlabHeap() {
|
|
|
|
|
if constexpr (std::is_same_v<T, Process>) {
|
|
|
|
|
return slab_heap_Process;
|
|
|
|
|
return slab_heap_container->process;
|
|
|
|
|
} else if constexpr (std::is_same_v<T, KThread>) {
|
|
|
|
|
return slab_heap_KThread;
|
|
|
|
|
return slab_heap_container->thread;
|
|
|
|
|
} else if constexpr (std::is_same_v<T, KEvent>) {
|
|
|
|
|
return slab_heap_KEvent;
|
|
|
|
|
return slab_heap_container->event;
|
|
|
|
|
} else if constexpr (std::is_same_v<T, KSharedMemory>) {
|
|
|
|
|
return slab_heap_KSharedMemory;
|
|
|
|
|
return slab_heap_container->shared_memory;
|
|
|
|
|
} else if constexpr (std::is_same_v<T, KLinkedListNode>) {
|
|
|
|
|
return slab_heap_KLinkedListNode;
|
|
|
|
|
return slab_heap_container->linked_list_node;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -301,11 +301,16 @@ private:
|
|
|
|
|
bool exception_exited{};
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
KSlabHeap<Process> slab_heap_Process;
|
|
|
|
|
KSlabHeap<KThread> slab_heap_KThread;
|
|
|
|
|
KSlabHeap<KEvent> slab_heap_KEvent;
|
|
|
|
|
KSlabHeap<KSharedMemory> slab_heap_KSharedMemory;
|
|
|
|
|
KSlabHeap<KLinkedListNode> slab_heap_KLinkedListNode;
|
|
|
|
|
/// Helper to encapsulate all slab heaps in a single heap allocated container
|
|
|
|
|
struct SlabHeapContainer {
|
|
|
|
|
KSlabHeap<Process> process;
|
|
|
|
|
KSlabHeap<KThread> thread;
|
|
|
|
|
KSlabHeap<KEvent> event;
|
|
|
|
|
KSlabHeap<KSharedMemory> shared_memory;
|
|
|
|
|
KSlabHeap<KLinkedListNode> linked_list_node;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
std::unique_ptr<SlabHeapContainer> slab_heap_container;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
} // namespace Kernel
|
|
|
|
|