Twilight Princess
Decompilation of The Legend of Zelda: Twilight Princess
Loading...
Searching...
No Matches
JKRExpHeap.h
Go to the documentation of this file.
1#ifndef JKREXPHEAP_H
2#define JKREXPHEAP_H
3
5#include <stdint.h>
6
11class JKRExpHeap : public JKRHeap {
12public:
15 };
16
17 class CMemBlock {
18 friend class JKRExpHeap;
19
20 public:
21 void initiate(CMemBlock* prev, CMemBlock* next, u32 size, u8 groupId, u8 alignment);
22 JKRExpHeap::CMemBlock* allocFore(u32 size, u8 groupId1, u8 alignment1, u8 groupId2,
23 u8 alignment2);
24 JKRExpHeap::CMemBlock* allocBack(u32 size, u8 groupId1, u8 alignment1, u8 groupId2,
25 u8 alignment2);
26 int free(JKRExpHeap* heap);
27 static CMemBlock* getHeapBlock(void* ptr);
28
29 void newGroupId(u8 groupId) { mGroupId = groupId; }
30 bool isValid() const { return mMagic == 'HM'; }
31 bool isTempMemBlock() const { return mFlags & 0x80; }
32 int getAlignment() const { return mFlags & 0x7f; }
33 void* getContent() const { return (void*)(this + 1); }
34 CMemBlock* getPrevBlock() const { return mPrev; }
35 CMemBlock* getNextBlock() const { return mNext; }
36 u32 getSize() const { return size; }
37 u8 getGroupId() const { return mGroupId; }
38 static CMemBlock* getBlock(void* data) { return (CMemBlock*)((uintptr_t)data + -0x10); }
39
40 private:
41 /* 0x0 */ u16 mMagic;
42 /* 0x2 */ u8 mFlags; // a|bbbbbbb a=temporary b=alignment
43 /* 0x3 */ u8 mGroupId;
44 /* 0x4 */ u32 size;
45 /* 0x8 */ CMemBlock* mPrev;
46 /* 0xC */ CMemBlock* mNext;
47 }; // Size: 0x10
48 friend class CMemBlock;
49
50protected:
51 JKRExpHeap(void* data, u32 size, JKRHeap* parent, bool errorFlag);
52 virtual ~JKRExpHeap();
53
54 void* allocFromHead(u32 size, int align);
55 void* allocFromHead(u32 size);
56 void* allocFromTail(u32 size, int align);
57 void* allocFromTail(u32 size);
58 void appendUsedList(CMemBlock* newblock);
60 void removeFreeBlock(CMemBlock* block);
61 void removeUsedBlock(CMemBlock* block);
62 void recycleFreeBlock(CMemBlock* block);
63 void joinTwoBlocks(CMemBlock* block);
64
65public:
66 BOOL isEmpty();
67 s32 getUsedSize(u8 groupId) const;
68 s32 getTotalUsedSize(void) const;
69
74
75public:
76 /* vt[04] */ virtual u32 getHeapType(); /* override */
77 /* vt[05] */ virtual bool check(); /* override */
78 /* vt[06] */ virtual bool dump_sort(); /* override */
79 /* vt[07] */ virtual bool dump(); /* override */
80 /* vt[08] */ virtual void do_destroy(); /* override */
81 /* vt[09] */ virtual void* do_alloc(u32 size, int alignment); /* override */
82 /* vt[10] */ virtual void do_free(void* ptr); /* override */
83 /* vt[11] */ virtual void do_freeAll(); /* override */
84 /* vt[12] */ virtual void do_freeTail(); /* override */
85 /* vt[13] */ virtual void do_fillFreeArea(); /* override */
86 /* vt[14] */ virtual s32 do_resize(void* ptr, u32 size); /* override */
87 /* vt[15] */ virtual s32 do_getSize(void* ptr); /* override */
88 /* vt[16] */ virtual s32 do_getFreeSize(); /* override */
89 /* vt[17] */ virtual void* do_getMaxFreeBlock(); /* override */
90 /* vt[18] */ virtual s32 do_getTotalFreeSize(); /* override */
91 /* vt[19] */ virtual s32 do_changeGroupID(u8 newGroupID); /* override */
92 /* vt[20] */ virtual u8 do_getCurrentGroupId(); /* override */
93 /* vt[21] */ virtual void state_register(JKRHeap::TState* p, u32 id) const; /* override */
94 /* vt[22] */ virtual bool state_compare(JKRHeap::TState const& r1,
95 JKRHeap::TState const& r2) const; /* override */
96
97 /* 0x6C */ u8 mAllocMode;
98 /* 0x6D */ u8 mCurrentGroupId;
99 /* 0x6E */ bool field_0x6e;
100
101private:
102 /* 0x70 */ void* field_0x70;
103 /* 0x74 */ u32 field_0x74;
108
109public:
110 static JKRExpHeap* createRoot(int maxHeaps, bool errorFlag);
111 static JKRExpHeap* create(u32 size, JKRHeap* parent, bool errorFlag);
112 static JKRExpHeap* create(void* ptr, u32 size, JKRHeap* parent, bool errorFlag);
113
114 static s32 getUsedSize_(JKRExpHeap* heap) { return heap->mSize - heap->getTotalFreeSize(); }
115 static void* getState_(TState* state) { return getState_buf_(state); }
116};
117
118inline JKRExpHeap* JKRCreateExpHeap(u32 size, JKRHeap* parent, bool errorFlag) {
119 return JKRExpHeap::create(size, parent, errorFlag);
120}
121
122inline void JKRDestroyExpHeap(JKRExpHeap* heap) {
123 heap->destroy();
124}
125
126#endif /* JKREXPHEAP_H */
void JKRDestroyExpHeap(JKRExpHeap *heap)
Definition JKRExpHeap.h:122
JKRExpHeap * JKRCreateExpHeap(u32 size, JKRHeap *parent, bool errorFlag)
Definition JKRExpHeap.h:118
static s32 r2
Definition c_math.cpp:168
static s32 r1
Definition c_math.cpp:166
Definition JKRExpHeap.h:17
bool isValid() const
Definition JKRExpHeap.h:30
JKRExpHeap::CMemBlock * allocBack(u32 size, u8 groupId1, u8 alignment1, u8 groupId2, u8 alignment2)
Definition JKRExpHeap.cpp:1018
u32 size
Definition JKRExpHeap.h:44
u8 mFlags
Definition JKRExpHeap.h:42
JKRExpHeap::CMemBlock * allocFore(u32 size, u8 groupId1, u8 alignment1, u8 groupId2, u8 alignment2)
Definition JKRExpHeap.cpp:1002
static CMemBlock * getHeapBlock(void *ptr)
Definition JKRExpHeap.cpp:1042
int getAlignment() const
Definition JKRExpHeap.h:32
CMemBlock * mPrev
Definition JKRExpHeap.h:45
CMemBlock * getPrevBlock() const
Definition JKRExpHeap.h:34
u8 mGroupId
Definition JKRExpHeap.h:43
u8 getGroupId() const
Definition JKRExpHeap.h:37
void * getContent() const
Definition JKRExpHeap.h:33
bool isTempMemBlock() const
Definition JKRExpHeap.h:31
CMemBlock * mNext
Definition JKRExpHeap.h:46
static CMemBlock * getBlock(void *data)
Definition JKRExpHeap.h:38
void initiate(CMemBlock *prev, CMemBlock *next, u32 size, u8 groupId, u8 alignment)
Definition JKRExpHeap.cpp:992
u32 getSize() const
Definition JKRExpHeap.h:36
int free(JKRExpHeap *heap)
Definition JKRExpHeap.cpp:1036
void newGroupId(u8 groupId)
Definition JKRExpHeap.h:29
u16 mMagic
Definition JKRExpHeap.h:41
CMemBlock * getNextBlock() const
Definition JKRExpHeap.h:35
Definition JKRExpHeap.h:11
void * field_0x70
Definition JKRExpHeap.h:102
BOOL isEmpty()
Definition JKRExpHeap.cpp:644
static JKRExpHeap * createRoot(int maxHeaps, bool errorFlag)
Definition JKRExpHeap.cpp:14
virtual s32 do_changeGroupID(u8 newGroupID)
Definition JKRExpHeap.cpp:503
void removeUsedBlock(CMemBlock *block)
Definition JKRExpHeap.cpp:710
virtual ~JKRExpHeap()
Definition JKRExpHeap.cpp:167
void appendUsedList(CMemBlock *newblock)
Definition JKRExpHeap.cpp:651
u8 mAllocMode
Definition JKRExpHeap.h:97
bool field_0x6e
Definition JKRExpHeap.h:99
CMemBlock * mHeadUsedList
Definition JKRExpHeap.h:106
static s32 getUsedSize_(JKRExpHeap *heap)
Definition JKRExpHeap.h:114
CMemBlock * mTailFreeList
Definition JKRExpHeap.h:105
virtual s32 do_getFreeSize()
Definition JKRExpHeap.cpp:582
void setAllocationMode(EAllocMode mode)
Definition JKRExpHeap.h:71
virtual bool check()
Definition JKRExpHeap.cpp:814
void recycleFreeBlock(CMemBlock *block)
Definition JKRExpHeap.cpp:727
CMemBlock * mTailUsedList
Definition JKRExpHeap.h:107
s32 getUsedSize(u8 groupId) const
Definition JKRExpHeap.cpp:618
void * allocFromHead(u32 size, int align)
Definition JKRExpHeap.cpp:236
virtual void do_destroy()
Definition JKRExpHeap.cpp:137
virtual void state_register(JKRHeap::TState *p, u32 id) const
Definition JKRExpHeap.cpp:1064
virtual bool state_compare(JKRHeap::TState const &r1, JKRHeap::TState const &r2) const
Definition JKRExpHeap.cpp:1089
virtual u32 getHeapType()
Definition JKRExpHeap.cpp:1103
u8 mCurrentGroupId
Definition JKRExpHeap.h:98
u32 field_0x74
Definition JKRExpHeap.h:103
virtual void do_freeTail()
Definition JKRExpHeap.cpp:478
virtual s32 do_getSize(void *ptr)
Definition JKRExpHeap.cpp:571
EAllocMode
Definition JKRExpHeap.h:13
@ ALLOC_MODE_1
Definition JKRExpHeap.h:14
virtual void do_fillFreeArea()
Definition JKRExpHeap.cpp:493
virtual bool dump_sort()
Definition JKRExpHeap.cpp:935
void joinTwoBlocks(CMemBlock *block)
Definition JKRExpHeap.cpp:785
virtual void do_free(void *ptr)
Definition JKRExpHeap.cpp:445
virtual void * do_alloc(u32 size, int alignment)
Definition JKRExpHeap.cpp:171
virtual void * do_getMaxFreeBlock()
Definition JKRExpHeap.cpp:594
CMemBlock * mHeadFreeList
Definition JKRExpHeap.h:104
virtual void do_freeAll()
Definition JKRExpHeap.cpp:462
static JKRExpHeap * create(u32 size, JKRHeap *parent, bool errorFlag)
Definition JKRExpHeap.cpp:59
void * allocFromTail(u32 size, int align)
Definition JKRExpHeap.cpp:370
void setFreeBlock(CMemBlock *block, CMemBlock *prev, CMemBlock *next)
Definition JKRExpHeap.cpp:673
static void * getState_(TState *state)
Definition JKRExpHeap.h:115
virtual s32 do_getTotalFreeSize()
Definition JKRExpHeap.cpp:608
virtual u8 do_getCurrentGroupId()
Definition JKRExpHeap.cpp:1107
virtual s32 do_resize(void *ptr, u32 size)
Definition JKRExpHeap.cpp:511
void removeFreeBlock(CMemBlock *block)
Definition JKRExpHeap.cpp:693
CMemBlock * getUsedFirst()
Definition JKRExpHeap.h:70
virtual bool dump()
Definition JKRExpHeap.cpp:889
JKRExpHeap(void *data, u32 size, JKRHeap *parent, bool errorFlag)
Definition JKRExpHeap.cpp:156
s32 getTotalUsedSize(void) const
Definition JKRExpHeap.cpp:632
Definition JKRHeap.h:28
Definition JKRHeap.h:23
void destroy()
Definition JKRHeap.cpp:156
static void * getState_buf_(TState *state)
Definition JKRHeap.h:175
s32 getTotalFreeSize()
Definition JKRHeap.cpp:276
u32 mSize
Definition JKRHeap.h:127
static u32 next
Definition CARDUnlock.c:29
DVDCommandBlock * prev
Definition dvdqueue.c:8
u32 mode
Definition GXTev.c:56
unsigned int size
Definition __os.h:106
p
Definition e_acos.c:103
int BOOL
Definition types.h:33
unsigned long u32
Definition types.h:12
unsigned short int u16
Definition types.h:10
signed long s32
Definition types.h:11
unsigned char u8
Definition types.h:8