sead
Loading...
Searching...
No Matches
seadHeap.h
Go to the documentation of this file.
1#ifndef SEAD_HEAP_H_
2#define SEAD_HEAP_H_
3
4#include <stddef.h>
5
6#include <container/seadOffsetList.h>
7#include <heap/seadDisposer.h>
8#include <prim/seadBitFlag.h>
9#include <prim/seadNamable.h>
10#include <prim/seadRuntimeTypeInfo.h>
11#include <prim/seadSafeString.h>
12#include <thread/seadCriticalSection.h>
13
14namespace sead { namespace hostio {
15
16class Context;
17
18} // namespace sead::hostio
19
20class Thread;
21
22class Heap : public IDisposer, public INamable
23{
24public:
30
31private:
34
35 class Flag
36 {
37 public:
39 {
42 //cDisposing,
43 //cEnableWarning,
44 //cEnableDebugFillSystem,
45 //cEnableDebugFillUser,
46 //cDontUseThis_MaxNumPlus1,
48 //cEnumStart = cDontUseThis_StartNumMinus1 + 1,
49 //cEnumMax = cDontUseThis_MaxNumPlus1 - 1
50 };
51 };
52
53public:
54 Heap(const SafeString& name, Heap* parent, void* start, size_t size, HeapDirection direction, bool enable_lock);
55 ~Heap() override { }
56
58
59 virtual void destroy() = 0;
60 virtual size_t adjust() = 0;
61
62 void* alloc(size_t size, s32 alignment)
63 {
64 return tryAlloc(size, alignment);
65 }
66
67 virtual void* tryAlloc(size_t size, s32 alignment) = 0;
68 virtual void free(void* ptr) = 0;
69 virtual void* resizeFront(void* ptr, size_t new_size) = 0;
70 virtual void* resizeBack(void* ptr, size_t new_size) = 0;
71 virtual void freeAll() = 0;
72 virtual const void* getStartAddress() const = 0;
73 virtual const void* getEndAddress() const = 0;
74 virtual size_t getSize() const = 0;
75 virtual size_t getFreeSize() const = 0;
76 virtual size_t getMaxAllocatableSize(s32 alignment = 4) const = 0;
77 Heap* getParent() const { return mParent; }
78 virtual bool isInclude(const void* ptr) const = 0;
80 virtual bool isFreeable() const = 0;
81 virtual bool isResizable() const = 0;
82 virtual bool isAdjustable() const = 0;
83
84 void setEnableLock(bool enable_lock)
85 {
86 mFlag.changeBit(Flag::cEnableLock, enable_lock);
87 }
88
89 bool isEnableLock() const
90 {
91 return mFlag.isOnBit(Flag::cEnableLock);
92 }
93
94 bool lock();
95 bool unlock();
96 void setEnableWarning(bool);
97 bool isEnableWarning() const;
100
101 virtual void dump() const
102 {
103 }
104
105protected:
106 virtual void genInformation_(hostio::Context* context);
107
108 Heap* findContainHeap_(const void* ptr);
109 bool hasNoChild_() const;
110 //static void setEnableDebugFillSystem_(Heap*, bool);
111 //static bool isEnableDebugFillSystem_(const Heap*);
112 //bool isEnableDebugFillAlloc_() const;
113 //bool isEnableDebugFillFree_() const;
114 //bool isEnableDebugFillHeapDestroy_() const;
115 void destruct_();
116 void dispose_(const void*, const void*);
117 void appendDisposer_(IDisposer* o);
118 void removeDisposer_(IDisposer* o);
120 void checkAccessThread_() const;
121
122public:
124 {
125 return mChildren.constBegin();
126 }
127
129 {
130 return mChildren.constEnd();
131 }
132
134 {
135 return static_cast<u32>(mChildren.size());
136 }
137
139 {
140 return mDisposerList.constBegin();
141 }
142
144 {
145 return mDisposerList.constEnd();
146 }
147
149 {
150 return static_cast<u32>(mDisposerList.size());
151 }
152
154
155protected:
156 void* mStart;
165
168 friend class HeapMgr;
169};
170#ifdef cafe
171static_assert(sizeof(Heap) == 0x90, "sead::Heap size mismatch");
172#endif // cafe
173
174} // namespace sead
175
176#endif // SEAD_HEAP_H_
Definition seadCriticalSection.h:13
Definition seadHeapMgr.h:21
Definition seadHeap.h:36
ValueType
Definition seadHeap.h:39
@ cDontUseThis_StartNumMinus1
Definition seadHeap.h:40
@ cEnableLock
Definition seadHeap.h:41
@ cDontUseThis_MemSize32bit
Definition seadHeap.h:47
Definition seadHeap.h:23
~Heap() override
Definition seadHeap.h:55
BitFlag32 mFlag
Definition seadHeap.h:164
virtual bool isAdjustable() const =0
u32 childSize() const
Definition seadHeap.h:133
friend IDisposer::~IDisposer()
bool hasNoChild_() const
void * alloc(size_t size, s32 alignment)
Definition seadHeap.h:62
OffsetList< Heap >::constIterator childBegin() const
Definition seadHeap.h:123
void dispose_(const void *, const void *)
OffsetList< IDisposer >::constIterator disposerBegin() const
Definition seadHeap.h:138
Heap * getParent() const
Definition seadHeap.h:77
void eraseChild_(Heap *)
DisposerList mDisposerList
Definition seadHeap.h:161
virtual size_t getMaxAllocatableSize(s32 alignment=4) const =0
virtual bool isResizable() const =0
virtual bool isFreeable() const =0
OffsetList< Heap >::constIterator childEnd() const
Definition seadHeap.h:128
Thread * getAccessThread() const
HeapDirection
Definition seadHeap.h:26
@ cHeapDirection_Reverse
Definition seadHeap.h:28
@ cHeapDirection_Forward
Definition seadHeap.h:27
HeapDirection getDirection() const
Definition seadHeap.h:79
bool unlock()
virtual void * resizeBack(void *ptr, size_t new_size)=0
Heap * findContainHeap_(const void *ptr)
Definition seadHeap.cpp:20
virtual size_t getSize() const =0
HeapDirection mDirection
Definition seadHeap.h:162
void setEnableLock(bool enable_lock)
Definition seadHeap.h:84
ListNode mListNode
Definition seadHeap.h:160
void setEnableWarning(bool)
bool isEnableLock() const
Definition seadHeap.h:89
void appendDisposer_(IDisposer *o)
Definition seadHeap.cpp:7
Heap * mParent
Definition seadHeap.h:158
void destruct_()
virtual void destroy()=0
OffsetList< Heap > HeapList
Definition seadHeap.h:32
HeapList mChildren
Definition seadHeap.h:159
virtual const void * getStartAddress() const =0
virtual void free(void *ptr)=0
void removeDisposer_(IDisposer *o)
Definition seadHeap.cpp:13
virtual void dump() const
Definition seadHeap.h:101
void setAccessThread(Thread *)
virtual void freeAll()=0
u32 disposerSize() const
Definition seadHeap.h:148
bool lock()
void pushBackChild_(Heap *)
size_t mSize
Definition seadHeap.h:157
virtual const void * getEndAddress() const =0
OffsetList< IDisposer > DisposerList
Definition seadHeap.h:33
CriticalSection mCS
Definition seadHeap.h:163
void checkAccessThread_() const
virtual void genInformation_(hostio::Context *context)
virtual size_t getFreeSize() const =0
void * mStart
Definition seadHeap.h:156
friend IDisposer::IDisposer()
virtual bool isInclude(const void *ptr) const =0
OffsetList< IDisposer >::constIterator disposerEnd() const
Definition seadHeap.h:143
bool isEnableWarning() const
virtual void * tryAlloc(size_t size, s32 alignment)=0
virtual void * resizeFront(void *ptr, size_t new_size)=0
Heap(const SafeString &name, Heap *parent, void *start, size_t size, HeapDirection direction, bool enable_lock)
virtual size_t adjust()=0
Definition seadDisposer.h:12
Definition seadNamable.h:9
Definition seadListImpl.h:11
Definition seadOffsetList.h:11
Definition seadThread.h:28
Definition seadHostIODummy.h:29
Definition seadHeap.h:14
Definition seadAssert.h:44
BitFlag< u32 > BitFlag32
Definition seadBitFlag.h:125
SafeStringBase< char > SafeString
Definition seadSafeString.h:409
#define SEAD_RTTI_BASE(CLASS)
Definition seadRuntimeTypeInfo.h:75