Files
tp/include/JSystem/JGadget/linklist.h
T

85 lines
2.3 KiB
C++
Raw Normal View History

2021-03-28 22:49:05 +02:00
#ifndef LINKLIST_H
#define LINKLIST_H
2021-01-05 09:47:26 -08:00
#include "dolphin/types.h"
namespace JGadget {
struct TLinkListNode {
2021-09-27 15:27:58 -07:00
TLinkListNode() {
mNext = NULL;
mPrev = NULL;
}
/* 0x0 */ TLinkListNode* mNext;
/* 0x4 */ TLinkListNode* mPrev;
}; // Size: 0x8
struct TNodeLinkList {
2021-09-27 15:27:58 -07:00
struct iterator {
iterator(TLinkListNode* pNode) { node = pNode; }
iterator(const iterator& iter) { *this = iter; }
TLinkListNode* node;
};
2021-11-26 06:50:22 -08:00
TNodeLinkList() : ocObject_() { Initialize_(); }
2021-09-27 15:27:58 -07:00
void Initialize_() {
2022-07-11 12:44:01 -07:00
count = 0;
2021-11-26 06:50:22 -08:00
ocObject_.mNext = &ocObject_;
ocObject_.mPrev = &ocObject_;
2021-09-27 15:27:58 -07:00
}
iterator end() {
2021-11-26 06:50:22 -08:00
iterator iter(&ocObject_);
2021-09-27 15:27:58 -07:00
return iter;
}
/* 802DCA1C */ ~TNodeLinkList();
2022-07-11 12:44:01 -07:00
/* 802DCAA0 */ iterator erase(JGadget::TNodeLinkList::iterator, JGadget::TNodeLinkList::iterator);
/* 802DCA58 */ iterator erase(JGadget::TNodeLinkList::iterator);
/* 802DCB08 */ void splice(JGadget::TNodeLinkList::iterator, JGadget::TNodeLinkList&,
JGadget::TNodeLinkList::iterator);
2022-07-11 12:44:01 -07:00
/* 802DCBA8 */ iterator Insert(JGadget::TNodeLinkList::iterator, JGadget::TLinkListNode*);
2021-11-26 06:50:22 -08:00
/* 802DCBD4 */ iterator Erase(JGadget::TLinkListNode*);
/* 802DCBF8 */ void Remove(JGadget::TLinkListNode*);
2021-09-27 15:27:58 -07:00
2022-07-11 12:44:01 -07:00
/* 0x00 */ int count;
2021-11-26 06:50:22 -08:00
/* 0x04 */ TLinkListNode ocObject_;
2021-09-27 15:27:58 -07:00
}; // Size: 0xC
template <typename T, int I>
struct TLinkList : public TNodeLinkList {
TLinkList() : TNodeLinkList() {}
struct iterator : TNodeLinkList::iterator {
iterator(TNodeLinkList::iterator iter) : TNodeLinkList::iterator(iter) {}
};
2021-11-26 06:50:22 -08:00
TLinkListNode* Element_toNode(T* element) const { return &element->ocObject_; }
2021-09-27 15:57:11 -07:00
2021-09-27 15:27:58 -07:00
void Insert(TLinkList::iterator iter, T* element) {
TLinkListNode* node = Element_toNode(element);
TNodeLinkList::Insert(iter, node);
}
2021-11-26 06:50:22 -08:00
iterator Erase(T* element) {
TLinkListNode* node = Element_toNode(element);
return ((TNodeLinkList*)this)->Erase(node);
}
2021-09-27 15:27:58 -07:00
TLinkList::iterator end() {
TNodeLinkList::iterator node_iter = TNodeLinkList::end();
TLinkList::iterator iter(node_iter);
return iter;
}
void Push_back(T* element) {
TLinkList::iterator iter(TLinkList::end());
this->Insert(iter, element);
}
};
}; // namespace JGadget
2021-03-28 22:49:05 +02:00
#endif /* LINKLIST_H */