sead
Loading...
Searching...
No Matches
seadHeapMgr.h
Go to the documentation of this file.
1#ifndef SEAD_HEAPMGR_H_
2#define SEAD_HEAPMGR_H_
3
4#include <container/seadPtrArray.h>
5#include <heap/seadArena.h>
6#include <hostio/seadHostIODummy.h>
7#include <thread/seadCriticalSection.h>
8
9#define NUM_ROOT_HEAPS_MAX 4
10#define NUM_INDEPENDENT_HEAPS_MAX 4
11
12namespace sead {
13
15class Heap;
16
17template <typename A>
18class IDelegate1;
19
20class HeapMgr : public hostio::Node
21{
22public:
23 //struct AllocCallbackArg;
24
33
34 //struct FreeCallbackArg;
35 //struct CreateCallbackArg;
36 //struct DestroyCallbackArg;
37
38private:
39 //typedef IDelegate1<const AllocCallbackArg*> IAllocCallback;
41 //typedef IDelegate1<const FreeCallbackArg*> IFreeCallback;
42 //typedef IDelegate1<const CreateCallbackArg*> ICreateCallback;
43 //typedef IDelegate1<const DestroyCallbackArg*> IDestroyCallback;
44
46
47public:
49
50public:
51 HeapMgr();
52 virtual ~HeapMgr();
53
54 static void initialize(u32 size);
55 static void initialize(Arena* arena);
56 static void destroy();
57
58 //void initHostIO();
59
60 static bool isInitialized() { return sInstancePtr != nullptr; }
61 static HeapMgr* instance() { return sInstancePtr; }
62
63 Heap* findContainHeap(const void* memBlock) const;
64 Heap* getCurrentHeap() const;
65
66 static Heap* getRootHeap(s32 n) { return sRootHeaps.at(n); }
67 static s32 getRootHeapNum() { return sRootHeaps.size(); }
68 static void addRootHeap(Heap* heap);
69 static const Arena* getArena();
71 static bool isContainedInAnyHeap(const void* ptr) { return sInstancePtr->findContainHeap(ptr) != nullptr; }
72
73 //IAllocCallback* setAllocCallback(IAllocCallback*);
74 //IAllocCallback* getAllocCallback();
77 //IFreeCallback* setFreeCallback(IFreeCallback*);
78 //IFreeCallback* getFreeCallback();
79 //ICreateCallback* setCreateCallback(ICreateCallback*);
80 //ICreateCallback* getCreateCallback();
81 //IDestroyCallback* setDestroyCallback(IDestroyCallback*);
82 //IDestroyCallback* getDestroyCallback();
84 //void callDestroyCallback_(Heap*);
85 //void callFreeCallback_(const FreeCallbackArg&);
86
88
89protected:
91
92 friend class CurrentHeapSetter;
93
94 static void createRootHeap_();
95 static void initializeImpl_();
96
97protected:
98 //IAllocCallback* mAllocCallback;
100 //IFreeCallback* mFreeCallback;
101 //ICreateCallback* mCreateCallback;
102 //IDestroyCallback* mDestroyCallback;
103
106 static Arena* sArena;
111};
112#ifdef cafe
113static_assert(sizeof(HeapMgr) == 8, "sead::HeapMgr size mismatch");
114#endif // cafe
115
117{
118public:
120 : mPrevHeap(nullptr)
121 {
122 if (heap == nullptr)
123 mPrevHeap = reinterpret_cast<Heap*>(1);
124
125 else
127 }
128
130 {
131 if (mPrevHeap != reinterpret_cast<Heap*>(1))
133 }
134
135private:
137};
138static_assert(sizeof(CurrentHeapSetter) == 4, "sead::CurrentHeapSetter size mismatch");
139
140} // namespace sead
141
142#undef NUM_ROOT_HEAPS_MAX
143#undef NUM_INDEPENDENT_HEAPS_MAX
144
145#endif // SEAD_HEAPMGR_H_
Definition seadArena.h:9
Definition seadCriticalSection.h:13
Definition seadHeapMgr.h:117
CurrentHeapSetter(Heap *heap)
Definition seadHeapMgr.h:119
~CurrentHeapSetter()
Definition seadHeapMgr.h:129
Heap * mPrevHeap
Definition seadHeapMgr.h:136
Definition seadPtrArray.h:291
Definition seadHeapMgr.h:21
static void destroy()
static HeapMgr * instance()
Definition seadHeapMgr.h:61
void callCreateCallback_(Heap *)
Definition seadHeapMgr.h:83
virtual ~HeapMgr()
Definition seadHeapMgr.cpp:25
Heap * setCurrentHeap_(Heap *heap)
static IndependentHeaps sIndependentHeaps
Definition seadHeapMgr.h:110
static HeapMgr * sInstancePtr
Definition seadHeapMgr.h:105
static RootHeaps sRootHeaps
Definition seadHeapMgr.h:108
static Arena sDefaultArena
Definition seadHeapMgr.h:107
Heap * findContainHeap(const void *memBlock) const
Definition seadHeapMgr.cpp:30
static void initializeImpl_()
FixedPtrArray< Heap, NUM_INDEPENDENT_HEAPS_MAX > IndependentHeaps
Definition seadHeapMgr.h:48
static Heap * getRootHeap(s32 n)
Definition seadHeapMgr.h:66
IDelegate1< const AllocFailedCallbackArg * > IAllocFailedCallback
Definition seadHeapMgr.h:40
static HeapMgr sInstance
Definition seadHeapMgr.h:104
static IndependentHeaps * getIndependentHeaps()
Definition seadHeapMgr.h:70
IAllocFailedCallback * setAllocFailedCallback(IAllocFailedCallback *callback)
static void createRootHeap_()
static const Arena * getArena()
static void initialize(u32 size)
static void addRootHeap(Heap *heap)
Heap * getCurrentHeap() const
Definition seadHeapMgr.cpp:52
IAllocFailedCallback * mAllocFailedCallback
Definition seadHeapMgr.h:99
static CriticalSection * getHeapTreeLockCS_()
Definition seadHeapMgr.h:87
HeapMgr()
Definition seadHeapMgr.cpp:20
IAllocFailedCallback * getAllocFailedCallback()
FixedPtrArray< Heap, NUM_ROOT_HEAPS_MAX > RootHeaps
Definition seadHeapMgr.h:45
static CriticalSection sHeapTreeLockCS
Definition seadHeapMgr.h:109
static void initialize(Arena *arena)
static bool isContainedInAnyHeap(const void *ptr)
Definition seadHeapMgr.h:71
static Arena * sArena
Definition seadHeapMgr.h:106
static bool isInitialized()
Definition seadHeapMgr.h:60
static s32 getRootHeapNum()
Definition seadHeapMgr.h:67
Definition seadHeap.h:23
Definition seadDelegate.h:266
Definition seadHostIODummy.h:25
Definition seadHeap.h:14
Definition seadAssert.h:44
#define NUM_INDEPENDENT_HEAPS_MAX
Definition seadHeapMgr.h:10
#define NUM_ROOT_HEAPS_MAX
Definition seadHeapMgr.h:9
Definition seadHeapMgr.h:26
size_t alloc_size
Definition seadHeapMgr.h:30
size_t request_size
Definition seadHeapMgr.h:28
Heap * heap
Definition seadHeapMgr.h:27
s32 request_alignment
Definition seadHeapMgr.h:29
s32 alloc_alignment
Definition seadHeapMgr.h:31