Remove fake tXL_NODE struct (#103)

This commit is contained in:
cadmic
2024-05-09 13:20:44 -07:00
committed by GitHub
parent ceedfb8d64
commit c7d00d89e0
3 changed files with 43 additions and 46 deletions
+3 -6
View File
@@ -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
View File
@@ -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
View File
@@ -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)) {