mirror of
https://github.com/encounter/oot-gc.git
synced 2026-07-10 12:18:42 -07:00
Remove fake tXL_NODE struct (#103)
This commit is contained in:
@@ -3,12 +3,9 @@
|
||||
|
||||
#include "dolphin.h"
|
||||
|
||||
typedef struct tXL_NODE tXL_NODE;
|
||||
|
||||
struct tXL_NODE {
|
||||
/* 0x0 */ tXL_NODE* next;
|
||||
/* 0x4 */ u8 data[];
|
||||
}; // size = 0x4
|
||||
// List nodes consist of a pointer to the next node followed by an arbitrary amount of data.
|
||||
#define NODE_NEXT(pNode) (*(void**)(pNode))
|
||||
#define NODE_DATA(pNode) (((u8*)(pNode) + 4))
|
||||
|
||||
typedef struct tXL_LIST {
|
||||
/* 0x0 */ s32 nItemSize;
|
||||
|
||||
+28
-28
@@ -11,8 +11,8 @@ bool xlListMake(tXL_LIST** ppList, s32 nItemSize) {
|
||||
if (xlListMakeItem(&gListList, ppList)) {
|
||||
(*ppList)->nItemCount = 0;
|
||||
(*ppList)->nItemSize = nItemSize;
|
||||
(*ppList)->pNodeNext = (void*)0;
|
||||
(*ppList)->pNodeHead = (void*)0;
|
||||
(*ppList)->pNodeNext = NULL;
|
||||
(*ppList)->pNodeHead = NULL;
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -21,13 +21,13 @@ bool xlListMake(tXL_LIST** ppList, s32 nItemSize) {
|
||||
}
|
||||
|
||||
static inline bool xlListWipe(tXL_LIST* pList) {
|
||||
tXL_NODE* pNode;
|
||||
tXL_NODE* pNodeNext;
|
||||
void* pNode;
|
||||
void* pNodeNext;
|
||||
|
||||
pNode = pList->pNodeHead;
|
||||
while (pNode != NULL) {
|
||||
pNodeNext = pNode->next;
|
||||
if (!xlHeapFree((void**)&pNode)) {
|
||||
pNodeNext = NODE_NEXT(pNode);
|
||||
if (!xlHeapFree(&pNode)) {
|
||||
return false;
|
||||
}
|
||||
pNode = pNodeNext;
|
||||
@@ -53,22 +53,22 @@ bool xlListFree(tXL_LIST** ppList) {
|
||||
|
||||
bool xlListMakeItem(tXL_LIST* pList, void** ppItem) {
|
||||
s32 nSize;
|
||||
tXL_NODE* pListNode;
|
||||
tXL_NODE* pNode;
|
||||
tXL_NODE* pNodeNext;
|
||||
void* pListNode;
|
||||
void* pNode;
|
||||
void* pNodeNext;
|
||||
|
||||
nSize = pList->nItemSize + 4;
|
||||
if (!xlHeapTake((void**)&pListNode, nSize)) {
|
||||
if (!xlHeapTake(&pListNode, nSize)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
pListNode->next = NULL;
|
||||
*ppItem = (void*)pListNode->data;
|
||||
pNode = (tXL_NODE*)&pList->pNodeHead;
|
||||
NODE_NEXT(pListNode) = NULL;
|
||||
*ppItem = NODE_DATA(pListNode);
|
||||
pNode = &pList->pNodeHead;
|
||||
while (pNode != NULL) {
|
||||
pNodeNext = pNode->next;
|
||||
pNodeNext = NODE_NEXT(pNode);
|
||||
if (pNodeNext == NULL) {
|
||||
pNode->next = pListNode;
|
||||
NODE_NEXT(pNode) = pListNode;
|
||||
pList->nItemCount++;
|
||||
return true;
|
||||
}
|
||||
@@ -79,20 +79,20 @@ bool xlListMakeItem(tXL_LIST* pList, void** ppItem) {
|
||||
}
|
||||
|
||||
bool xlListFreeItem(tXL_LIST* pList, void** ppItem) {
|
||||
tXL_NODE* pNode;
|
||||
tXL_NODE* pNodeNext;
|
||||
void* pNode;
|
||||
void* pNodeNext;
|
||||
|
||||
if (pList->pNodeHead == NULL) {
|
||||
return false;
|
||||
}
|
||||
|
||||
pNode = (tXL_NODE*)&pList->pNodeHead;
|
||||
pNode = &pList->pNodeHead;
|
||||
while (pNode != NULL) {
|
||||
pNodeNext = pNode->next;
|
||||
if (*ppItem == (void*)pNodeNext->data) {
|
||||
pNode->next = pNodeNext->next;
|
||||
pNodeNext = NODE_NEXT(pNode);
|
||||
if (*ppItem == NODE_DATA(pNodeNext)) {
|
||||
NODE_NEXT(pNode) = NODE_NEXT(pNodeNext);
|
||||
*ppItem = NULL;
|
||||
if (!xlHeapFree((void**)&pNodeNext)) {
|
||||
if (!xlHeapFree(&pNodeNext)) {
|
||||
return false;
|
||||
}
|
||||
pList->nItemCount--;
|
||||
@@ -106,7 +106,7 @@ bool xlListFreeItem(tXL_LIST* pList, void** ppItem) {
|
||||
}
|
||||
|
||||
static inline bool xlListTest(tXL_LIST* pList) {
|
||||
tXL_NODE* pNode;
|
||||
void* pNode;
|
||||
|
||||
if (pList == &gListList) {
|
||||
return true;
|
||||
@@ -114,17 +114,17 @@ static inline bool xlListTest(tXL_LIST* pList) {
|
||||
|
||||
pNode = gListList.pNodeHead;
|
||||
while (pNode != NULL) {
|
||||
if (pList == (tXL_LIST*)pNode->data) {
|
||||
if (pList == (tXL_LIST*)NODE_DATA(pNode)) {
|
||||
return true;
|
||||
}
|
||||
pNode = pNode->next;
|
||||
pNode = NODE_NEXT(pNode);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
bool xlListTestItem(tXL_LIST* pList, void* pItem) {
|
||||
tXL_NODE* pListNode;
|
||||
void* pListNode;
|
||||
|
||||
if (!xlListTest(pList) || pItem == NULL) {
|
||||
return false;
|
||||
@@ -132,10 +132,10 @@ bool xlListTestItem(tXL_LIST* pList, void* pItem) {
|
||||
|
||||
pListNode = pList->pNodeHead;
|
||||
while (pListNode != NULL) {
|
||||
if (pItem == pListNode->data) {
|
||||
if (pItem == NODE_DATA(pListNode)) {
|
||||
return true;
|
||||
}
|
||||
pListNode = pListNode->next;
|
||||
pListNode = NODE_NEXT(pListNode);
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
+12
-12
@@ -4,10 +4,10 @@
|
||||
static tXL_LIST* gpListData;
|
||||
|
||||
static inline bool xlObjectFindData(__anon_0x5062** ppData, _XL_OBJECTTYPE* pType) {
|
||||
tXL_NODE* pListNode;
|
||||
void* pListNode;
|
||||
|
||||
for (pListNode = (tXL_NODE*)gpListData->pNodeHead; pListNode != NULL; pListNode = pListNode->next) {
|
||||
*ppData = (__anon_0x5062*)pListNode->data;
|
||||
for (pListNode = gpListData->pNodeHead; pListNode != NULL; pListNode = NODE_NEXT(pListNode)) {
|
||||
*ppData = (__anon_0x5062*)NODE_DATA(pListNode);
|
||||
if ((*ppData)->pType == pType) {
|
||||
return true;
|
||||
}
|
||||
@@ -33,8 +33,8 @@ static inline bool xlObjectMakeData(__anon_0x5062** ppData, _XL_OBJECTTYPE* pTyp
|
||||
bool xlObjectMake(void** ppObject, void* pArgument, _XL_OBJECTTYPE* pType) {
|
||||
bool bFlag;
|
||||
__anon_0x5062* pData;
|
||||
tXL_NODE* temp1;
|
||||
tXL_NODE* temp2;
|
||||
void* temp1;
|
||||
void* temp2;
|
||||
|
||||
if (!xlObjectFindData(&pData, pType)) {
|
||||
if (!xlObjectMakeData(&pData, pType)) {
|
||||
@@ -49,10 +49,10 @@ bool xlObjectMake(void** ppObject, void* pArgument, _XL_OBJECTTYPE* pType) {
|
||||
return false;
|
||||
}
|
||||
|
||||
temp1 = (tXL_NODE*)*ppObject;
|
||||
temp2 = (tXL_NODE*)pData;
|
||||
*ppObject = &temp1->data;
|
||||
temp1->next = temp2;
|
||||
temp1 = *ppObject;
|
||||
temp2 = pData;
|
||||
*ppObject = ((u8*)*ppObject + 4);
|
||||
NODE_NEXT(temp1) = temp2;
|
||||
|
||||
if (bFlag) {
|
||||
pType->pfEvent(*ppObject, 0, NULL);
|
||||
@@ -66,7 +66,7 @@ bool xlObjectFree(void** ppObject) {
|
||||
__anon_0x5062* pData = *(__anon_0x5062**)((u8*)*ppObject - 4);
|
||||
|
||||
pData->pType->pfEvent(*ppObject, 3, NULL);
|
||||
*ppObject = (void*)((u8*)*ppObject - 4);
|
||||
*ppObject = ((u8*)*ppObject - 4);
|
||||
|
||||
if (xlListFreeItem(pData->pList, ppObject) == 0) {
|
||||
return false;
|
||||
@@ -134,10 +134,10 @@ bool xlObjectReset(void) {
|
||||
pListNode = gpListData->pNodeHead;
|
||||
|
||||
while (pListNode != NULL) {
|
||||
if (!xlListFree((void*)((s8*)pListNode + 4))) {
|
||||
if (!xlListFree((void*)((u8*)pListNode + 4))) {
|
||||
return false;
|
||||
}
|
||||
pListNode = ((tXL_NODE*)pListNode)->next;
|
||||
pListNode = NODE_NEXT(pListNode);
|
||||
}
|
||||
|
||||
if (!xlListFree(&gpListData)) {
|
||||
|
||||
Reference in New Issue
Block a user