#ifndef NW4R_UT_LIST_H #define NW4R_UT_LIST_H #include namespace nw4r { namespace ut { struct List { void* first; // at 0x0 void* last; // at 0x4 u16 size; // at 0x8 u16 offset; // at 0xA }; struct Node { void* prev; // at 0x0 void* next; // at 0x4 }; void List_Init(List* list, u16 offset); void List_Append(List* list, void* object); void List_Prepend(List* list, void* object); void List_Insert(List* list, void* next, void* object); void List_Remove(List* list, void* object); void* List_GetNext(const List* list, const void* object); void* List_GetPrev(const List* list, const void* object); void* List_GetNth(const List* list, u16 n); inline void* List_GetFirst(const List* list) { return List_GetNext(list, NULL); } inline const void* List_GetFirstConst(const List* list) { return List_GetFirst(list); } inline void* List_GetLast(const List* list) { return List_GetPrev(list, NULL); } inline const void* List_GetLastConst(const List* list) { return List_GetLast(list); } inline const void* List_GetNextConst(const List* list, const void* object) { return List_GetNext(list, object); } inline const void* List_GetNthConst(const List* list, u16 n) { return List_GetNth(list, n); } inline u16 List_GetSize(const List* list) { return list->size; } } // namespace ut } // namespace nw4r #endif