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 s32 getUsedSize(u8 groupId) const;
67 s32 getTotalUsedSize(void) const;
68
73
74public:
75 /* vt[04] */ virtual u32 getHeapType(); /* override */
76 /* vt[05] */ virtual bool check(); /* override */
77 /* vt[06] */ virtual bool dump_sort(); /* override */
78 /* vt[07] */ virtual bool dump(); /* override */
79 /* vt[08] */ virtual void do_destroy(); /* override */
80 /* vt[09] */ virtual void* do_alloc(u32 size, int alignment); /* override */
81 /* vt[10] */ virtual void do_free(void* ptr); /* override */
82 /* vt[11] */ virtual void do_freeAll(); /* override */
83 /* vt[12] */ virtual void do_freeTail(); /* override */
84 /* vt[13] */ virtual void do_fillFreeArea(); /* override */
85 /* vt[14] */ virtual s32 do_resize(void* ptr, u32 size); /* override */
86 /* vt[15] */ virtual s32 do_getSize(void* ptr); /* override */
87 /* vt[16] */ virtual s32 do_getFreeSize(); /* override */
88 /* vt[17] */ virtual void* do_getMaxFreeBlock(); /* override */
89 /* vt[18] */ virtual s32 do_getTotalFreeSize(); /* override */
90 /* vt[19] */ virtual s32 do_changeGroupID(u8 newGroupID); /* override */
91 /* vt[20] */ virtual u8 do_getCurrentGroupId(); /* override */
92 /* vt[21] */ virtual void state_register(JKRHeap::TState* p, u32 id) const; /* override */
93 /* vt[22] */ virtual bool state_compare(JKRHeap::TState const& r1,
94 JKRHeap::TState const& r2) const; /* override */
95
96 /* 0x6C */ u8 mAllocMode;
97 /* 0x6D */ u8 mCurrentGroupId;
98 /* 0x6E */ bool field_0x6e;
99
100private:
101 /* 0x70 */ void* field_0x70;
102 /* 0x74 */ u32 field_0x74;
107
108public:
109 static JKRExpHeap* createRoot(int maxHeaps, bool errorFlag);
110 static JKRExpHeap* create(u32 size, JKRHeap* parent, bool errorFlag);
111 static JKRExpHeap* create(void* ptr, u32 size, JKRHeap* parent, bool errorFlag);
112};
113
114inline JKRExpHeap* JKRCreateExpHeap(u32 size, JKRHeap* parent, bool errorFlag) {
115 return JKRExpHeap::create(size, parent, errorFlag);
116}
117
118#endif /* JKREXPHEAP_H */
static u32 next
Definition CARDUnlock.c:29
JKRExpHeap * JKRCreateExpHeap(u32 size, JKRHeap *parent, bool errorFlag)
Definition JKRExpHeap.h:114
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:894
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:878
static CMemBlock * getHeapBlock(void *ptr)
Definition JKRExpHeap.cpp:918
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:868
u32 getSize() const
Definition JKRExpHeap.h:36
int free(JKRExpHeap *heap)
Definition JKRExpHeap.cpp:912
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:101
static JKRExpHeap * createRoot(int maxHeaps, bool errorFlag)
Definition JKRExpHeap.cpp:12
virtual s32 do_changeGroupID(u8 newGroupID)
Definition JKRExpHeap.cpp:407
void removeUsedBlock(CMemBlock *block)
Definition JKRExpHeap.cpp:607
virtual ~JKRExpHeap()
Definition JKRExpHeap.cpp:109
void appendUsedList(CMemBlock *newblock)
Definition JKRExpHeap.cpp:545
u8 mAllocMode
Definition JKRExpHeap.h:96
bool field_0x6e
Definition JKRExpHeap.h:98
CMemBlock * mHeadUsedList
Definition JKRExpHeap.h:105
CMemBlock * mTailFreeList
Definition JKRExpHeap.h:104
virtual s32 do_getFreeSize()
Definition JKRExpHeap.cpp:480
void setAllocationMode(EAllocMode mode)
Definition JKRExpHeap.h:70
virtual bool check()
Definition JKRExpHeap.cpp:692
void recycleFreeBlock(CMemBlock *block)
Definition JKRExpHeap.cpp:624
CMemBlock * mTailUsedList
Definition JKRExpHeap.h:106
s32 getUsedSize(u8 groupId) const
Definition JKRExpHeap.cpp:516
void * allocFromHead(u32 size, int align)
Definition JKRExpHeap.cpp:156
virtual void do_destroy()
Definition JKRExpHeap.cpp:86
virtual void state_register(JKRHeap::TState *p, u32 id) const
Definition JKRExpHeap.cpp:928
virtual bool state_compare(JKRHeap::TState const &r1, JKRHeap::TState const &r2) const
Definition JKRExpHeap.cpp:951
virtual u32 getHeapType()
Definition JKRExpHeap.cpp:964
u8 mCurrentGroupId
Definition JKRExpHeap.h:97
u32 field_0x74
Definition JKRExpHeap.h:102
virtual void do_freeTail()
Definition JKRExpHeap.cpp:390
virtual s32 do_getSize(void *ptr)
Definition JKRExpHeap.cpp:469
EAllocMode
Definition JKRExpHeap.h:13
@ ALLOC_MODE_1
Definition JKRExpHeap.h:14
virtual void do_fillFreeArea()
Definition JKRExpHeap.cpp:405
virtual bool dump_sort()
Definition JKRExpHeap.cpp:807
void joinTwoBlocks(CMemBlock *block)
Definition JKRExpHeap.cpp:676
virtual void do_free(void *ptr)
Definition JKRExpHeap.cpp:368
virtual void * do_alloc(u32 size, int alignment)
Definition JKRExpHeap.cpp:113
virtual void * do_getMaxFreeBlock()
Definition JKRExpHeap.cpp:492
CMemBlock * mHeadFreeList
Definition JKRExpHeap.h:103
virtual void do_freeAll()
Definition JKRExpHeap.cpp:379
static JKRExpHeap * create(u32 size, JKRHeap *parent, bool errorFlag)
Definition JKRExpHeap.cpp:27
void * allocFromTail(u32 size, int align)
Definition JKRExpHeap.cpp:296
void setFreeBlock(CMemBlock *block, CMemBlock *prev, CMemBlock *next)
Definition JKRExpHeap.cpp:570
virtual s32 do_getTotalFreeSize()
Definition JKRExpHeap.cpp:506
virtual u8 do_getCurrentGroupId()
Definition JKRExpHeap.cpp:968
virtual s32 do_resize(void *ptr, u32 size)
Definition JKRExpHeap.cpp:415
void removeFreeBlock(CMemBlock *block)
Definition JKRExpHeap.cpp:590
CMemBlock * getUsedFirst()
Definition JKRExpHeap.h:69
virtual bool dump()
Definition JKRExpHeap.cpp:760
JKRExpHeap(void *data, u32 size, JKRHeap *parent, bool errorFlag)
Definition JKRExpHeap.cpp:98
s32 getTotalUsedSize(void) const
Definition JKRExpHeap.cpp:532
Definition JKRHeap.h:22
Definition JKRHeap.h:20
DVDCommandBlock * prev
Definition dvdqueue.c:8
u32 mode
Definition GXTev.c:56
unsigned int size
Definition __os.h:106
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
p
Definition e_acos.c:98