summaryrefslogtreecommitdiff
path: root/include/JSystem/JKernel/JKRSolidHeap.h
blob: de3aecf8dec99cce0039c4645f570c7f7f6f90c8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#ifndef JKRSOLIDHEAP_H
#define JKRSOLIDHEAP_H

#include "JSystem/JKernel/JKRHeap.h"

class JKRSolidHeap : public JKRHeap {
public:
    struct Unknown {
        /* 0x00 */ u32 field_0x0;
        /* 0x04 */ u32 field_0x4;
        /* 0x08 */ u32 field_0x8;
        /* 0x0C */ void* field_0xc;
        /* 0x10 */ Unknown* mNext;
    };

protected:
    JKRSolidHeap(void*, u32, JKRHeap*, bool);
    virtual ~JKRSolidHeap();

    void* allocFromHead(u32, int);
    void* allocFromTail(u32, int);

    static s32 getUsedSize(JKRSolidHeap* heap) { return heap->mSize - heap->getTotalFreeSize(); }

public:
    /* vt[04] */ virtual u32 getHeapType(void) { return 'SLID'; } /* override */
    /* vt[05] */ virtual bool check(void);               /* override */

    /* vt[07] */ virtual bool dump(void);                /* override */
    /* vt[08] */ virtual void do_destroy(void);          /* override */
    /* vt[09] */ virtual void* do_alloc(u32, int);       /* override */
    /* vt[10] */ virtual void do_free(void*);            /* override */
    /* vt[11] */ virtual void do_freeAll(void);          /* override */
    /* vt[12] */ virtual void do_freeTail(void);         /* override */
#if VERSION > VERSION_DEMO
    /* vt[13] */ virtual void do_freeFill(void);     /* override */
#endif
    /* vt[14] */ virtual s32 do_resize(void*, u32);      /* override */
    /* vt[15] */ virtual s32 do_getSize(void*);          /* override */
    /* vt[16] */ virtual s32 do_getFreeSize(void) { return mFreeSize;} /* override */
    /* vt[17] */ virtual void* do_getMaxFreeBlock(void) { return mSolidHead; } /* override */
    /* vt[18] */ virtual s32 do_getTotalFreeSize(void) { return getFreeSize(); }  /* override */

    /* vt[21] */ virtual void state_register(JKRHeap::TState*, u32) const; /* override */
    /* vt[22] */ virtual bool state_compare(JKRHeap::TState const&,
                                            JKRHeap::TState const&) const; /* override */

private:
    /* 0x00 */  // vtable
    /* 0x04 */  // JKRHeap
    /* 0x6C */ u32 mFreeSize;
    /* 0x70 */ u8* mSolidHead;
    /* 0x74 */ u8* mSolidTail;
    /* 0x78 */ Unknown* field_0x78;
    /* 0x7C */ u8 field_0x7C[0x80 - 0x7C];

public:
    s32 adjustSize(void);

    static JKRSolidHeap* create(u32, JKRHeap*, bool);
};  // Size: 0x80

#endif /* JKRSOLIDHEAP_H */