mirror of
https://github.com/zeldaret/tww.git
synced 2026-08-11 03:25:52 -04:00
JKRAramBlock
This commit is contained in:
+1
-1
@@ -763,7 +763,7 @@ config.libs = [
|
||||
Object(Matching, "JSystem/JKernel/JKRThread.cpp"),
|
||||
Object(Matching, "JSystem/JKernel/JKRAram.cpp"),
|
||||
Object(Matching, "JSystem/JKernel/JKRAramHeap.cpp"),
|
||||
Object(NonMatching, "JSystem/JKernel/JKRAramBlock.cpp"),
|
||||
Object(Matching, "JSystem/JKernel/JKRAramBlock.cpp"),
|
||||
Object(NonMatching, "JSystem/JKernel/JKRAramPiece.cpp"),
|
||||
Object(NonMatching, "JSystem/JKernel/JKRAramStream.cpp"),
|
||||
Object(Matching, "JSystem/JKernel/JKRFileLoader.cpp"),
|
||||
|
||||
@@ -4,24 +4,64 @@
|
||||
//
|
||||
|
||||
#include "JSystem/JKernel/JKRAramBlock.h"
|
||||
#include "JSystem/JKernel/JKRAramHeap.h"
|
||||
#include "JSystem/JKernel/JKRHeap.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
/* 802B59A4-802B5A18 .text __ct__12JKRAramBlockFUlUlUlUcb */
|
||||
JKRAramBlock::JKRAramBlock(unsigned long, unsigned long, unsigned long, unsigned char, bool) {
|
||||
/* Nonmatching */
|
||||
JKRAramBlock::JKRAramBlock(u32 address, u32 size, u32 freeSize, u8 groupId, bool isTempMemory) : mBlockLink(this) {
|
||||
mAddress = address;
|
||||
mSize = size;
|
||||
mFreeSize = freeSize;
|
||||
mGroupId = groupId;
|
||||
mIsTempMemory = isTempMemory;
|
||||
}
|
||||
|
||||
/* 802B5A18-802B5AD4 .text __dt__12JKRAramBlockFv */
|
||||
JKRAramBlock::~JKRAramBlock() {
|
||||
/* Nonmatching */
|
||||
JSUList<JKRAramBlock>* list = mBlockLink.getSupervisor();
|
||||
JSULink<JKRAramBlock>* prev = mBlockLink.getPrev();
|
||||
|
||||
if (prev) {
|
||||
JKRAramBlock* block = prev->getObject();
|
||||
block->mFreeSize = mSize + mFreeSize + block->mFreeSize;
|
||||
list->remove(&mBlockLink);
|
||||
} else {
|
||||
mFreeSize = mFreeSize + mSize;
|
||||
mSize = 0;
|
||||
}
|
||||
}
|
||||
|
||||
/* 802B5AD4-802B5B70 .text allocHead__12JKRAramBlockFUlUcP11JKRAramHeap */
|
||||
void JKRAramBlock::allocHead(unsigned long, unsigned char, JKRAramHeap*) {
|
||||
/* Nonmatching */
|
||||
JKRAramBlock* JKRAramBlock::allocHead(u32 size, u8 groupId, JKRAramHeap* aramHeap) {
|
||||
u32 address = mAddress;
|
||||
u32 usedSize = mSize;
|
||||
u32 nextAddress = address + usedSize;
|
||||
u32 freeSize = mFreeSize;
|
||||
u32 nextFreeSize = freeSize - size;
|
||||
|
||||
JKRAramBlock* block = new (aramHeap->getMgrHeap(), 0) JKRAramBlock(nextAddress, size, nextFreeSize, groupId, false);
|
||||
|
||||
mFreeSize = 0;
|
||||
JSULink<JKRAramBlock>* next = mBlockLink.getNext();
|
||||
JSUList<JKRAramBlock>* list = mBlockLink.getSupervisor();
|
||||
list->insert(next, &block->mBlockLink);
|
||||
return block;
|
||||
}
|
||||
|
||||
/* 802B5B70-802B5C14 .text allocTail__12JKRAramBlockFUlUcP11JKRAramHeap */
|
||||
void JKRAramBlock::allocTail(unsigned long, unsigned char, JKRAramHeap*) {
|
||||
/* Nonmatching */
|
||||
JKRAramBlock* JKRAramBlock::allocTail(u32 size, u8 groupId, JKRAramHeap* aramHeap) {
|
||||
u32 freeSize = mFreeSize;
|
||||
u32 address = mAddress;
|
||||
u32 usedSize = mSize;
|
||||
u32 endAddress = address + usedSize + freeSize;
|
||||
u32 tailAddress = endAddress - size;
|
||||
|
||||
JKRAramBlock* block = new (aramHeap->getMgrHeap(), 0) JKRAramBlock(tailAddress, size, 0, groupId, true);
|
||||
|
||||
mFreeSize -= size;
|
||||
JSULink<JKRAramBlock>* next = mBlockLink.getNext();
|
||||
JSUList<JKRAramBlock>* list = mBlockLink.getSupervisor();
|
||||
list->insert(next, &block->mBlockLink);
|
||||
return block;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user