1#ifndef SEAD_OFFSET_LIST_H_
2#define SEAD_OFFSET_LIST_H_
4#include <container/seadListImpl.h>
5#include <prim/seadPtrUtil.h>
66 T*
prev(
const T* obj)
const
75 T*
next(
const T* obj)
const
84 T*
nth(s32 index)
const;
87 void swap(T* obj1, T* obj2);
94 T*
find(
const T* obj)
const;
111 ListNode* next =
reinterpret_cast<ListNode*>(PtrUtil::addOffset(mPtr, mOffset))->next();
112 mPtr =
reinterpret_cast<T*>(PtrUtil::addOffset(next, -mOffset));
129 return it1.mPtr == it2.mPtr;
134 return it1.mPtr != it2.mPtr;
141 friend class constIterator;
161 const ListNode* next =
static_cast<
const ListNode*>(PtrUtil::addOffset(mPtr, mOffset))->next();
162 mPtr =
static_cast<
const T*>(PtrUtil::addOffset(next, -mOffset));
179 return it1.mPtr == it2.mPtr;
184 return it1.mPtr != it2.mPtr;
204 mPtr =
reinterpret_cast<T*>(PtrUtil::addOffset(mNext, -mOffset));
222 return it1.mPtr == it2.mPtr;
227 return it1.mPtr != it2.mPtr;
248 return iterator(listNodeToObj(mStartEnd.next()), mOffset);
253 return iterator(listNodeToObj(&mStartEnd), mOffset);
260 return constIterator(listNodeToObj(mStartEnd.next()), mOffset);
265 return constIterator(listNodeToObj(&mStartEnd), mOffset);
272 return robustIterator(listNodeToObj(mStartEnd.next()), mOffset);
277 return robustIterator(listNodeToObj(&mStartEnd), mOffset);
302 return reinterpret_cast<ListNode*>(PtrUtil::addOffset(obj, mOffset));
307 return reinterpret_cast<T*>(PtrUtil::addOffset(node, -mOffset));
319static_assert(
sizeof(
OffsetList<
int>) == 0x10,
"sead::OffsetList<T> size mismatch");
Definition seadListImpl.h:51
void pushFront(ListNode *n)
Definition seadListImpl.h:93
void clear()
Definition seadListImpl.cpp:79
ListNode * popFront()
Definition seadListImpl.cpp:64
ListNode * back() const
Definition seadListImpl.h:121
void insertAfter(ListNode *basis, ListNode *n)
Definition seadListImpl.h:108
ListNode * popBack()
Definition seadListImpl.cpp:49
void insertBefore(ListNode *basis, ListNode *n)
Definition seadListImpl.h:102
void pushBack(ListNode *n)
Definition seadListImpl.h:87
ListNode mStartEnd
Definition seadListImpl.h:146
void unsafeClear()
Definition seadListImpl.h:135
void erase(ListNode *n)
Definition seadListImpl.h:114
ListNode * front() const
Definition seadListImpl.h:120
Definition seadListImpl.h:11
ListNode * next() const
Definition seadListImpl.h:24
Definition seadOffsetList.h:145
constIterator(const T *ptr, s32 offset)
Definition seadOffsetList.h:147
friend bool operator!=(const constIterator &it1, const constIterator &it2)
Definition seadOffsetList.h:182
s32 mOffset
Definition seadOffsetList.h:189
friend bool operator==(const constIterator &it1, const constIterator &it2)
Definition seadOffsetList.h:177
const T * mPtr
Definition seadOffsetList.h:188
const T * operator->() const
Definition seadOffsetList.h:172
const T & operator*() const
Definition seadOffsetList.h:167
constIterator(const iterator &it)
Definition seadOffsetList.h:153
constIterator & operator++()
Definition seadOffsetList.h:159
Definition seadOffsetList.h:101
iterator & operator++()
Definition seadOffsetList.h:109
T * mPtr
Definition seadOffsetList.h:138
T * operator->() const
Definition seadOffsetList.h:122
iterator(T *ptr, s32 offset)
Definition seadOffsetList.h:103
friend bool operator!=(const iterator &it1, const iterator &it2)
Definition seadOffsetList.h:132
T & operator*() const
Definition seadOffsetList.h:117
friend bool operator==(const iterator &it1, const iterator &it2)
Definition seadOffsetList.h:127
s32 mOffset
Definition seadOffsetList.h:139
Definition seadOffsetList.h:240
Definition seadOffsetList.h:237
Definition seadOffsetList.h:243
Definition seadOffsetList.h:193
friend bool operator==(const robustIterator &it1, const robustIterator &it2)
Definition seadOffsetList.h:220
T & operator*() const
Definition seadOffsetList.h:210
friend bool operator!=(const robustIterator &it1, const robustIterator &it2)
Definition seadOffsetList.h:225
ListNode * mNext
Definition seadOffsetList.h:232
s32 mOffset
Definition seadOffsetList.h:233
robustIterator & operator++()
Definition seadOffsetList.h:202
T * mPtr
Definition seadOffsetList.h:231
T * operator->() const
Definition seadOffsetList.h:215
robustIterator(T *ptr, s32 offset)
Definition seadOffsetList.h:195
Definition seadOffsetList.h:11
void uniq(CompareCallback cmp)
T * back() const
Definition seadOffsetList.h:64
reverseConstIterator reverseConstBegin() const
bool isNodeLinked(const T *obj) const
T * prev(const T *obj) const
Definition seadOffsetList.h:66
s32(* CompareCallback)(const T *, const T *)
Definition seadOffsetList.h:13
void mergeSort(CompareCallback cmp)
constIterator constBegin() const
Definition seadOffsetList.h:258
reverseConstIterator toReverseConstIterator(const T *) const
reverseRobustIterator reverseRobustEnd()
void moveAfter(T *basis, T *obj)
T * listNodeToObj(const ListNode *node) const
Definition seadOffsetList.h:305
robustIterator toRobustIterator(T *)
void clear()
Definition seadOffsetList.h:23
constIterator constEnd() const
Definition seadOffsetList.h:263
reverseRobustIterator reverseRobustBegin()
ListNode * objToListNode(const T *obj) const
Definition seadOffsetList.h:300
reverseIterator reverseEnd() const
iterator begin() const
Definition seadOffsetList.h:246
void sort(CompareCallback cmp)
s32 mOffset
Definition seadOffsetList.h:316
T * next(const T *obj) const
Definition seadOffsetList.h:75
s32 indexOf(const T *obj) const
void moveBefore(T *basis, T *obj)
reverseIterator toReverseIterator(T *) const
T * find(const T *obj, CompareCallback cmp) const
robustIterator robustEnd()
Definition seadOffsetList.h:275
static s32 compareT(const T *, const T *)
T * front() const
Definition seadOffsetList.h:63
reverseConstIterator reverseConstEnd() const
reverseIterator reverseBegin() const
robustIterator robustBegin()
Definition seadOffsetList.h:270
constIterator toConstIterator(const T *) const
void erase(T *obj)
Definition seadOffsetList.h:58
void initOffset(s32 offset)
Definition seadOffsetList.h:21
T * find(const T *obj) const
T * popFront()
Definition seadOffsetList.h:46
OffsetList()
Definition seadOffsetList.h:16
T * popBack()
Definition seadOffsetList.h:45
T * listNodeToObjWithNullCheck(const ListNode *node) const
Definition seadOffsetList.h:310
void pushBack(T *obj)
Definition seadOffsetList.h:33
void unsafeClear()
Definition seadOffsetList.h:28
void pushFront(T *obj)
Definition seadOffsetList.h:39
iterator end() const
Definition seadOffsetList.h:251
iterator toIterator(T *) const
void swap(T *obj1, T *obj2)
void insertAfter(const T *basis, T *obj)
Definition seadOffsetList.h:53
void insertBefore(const T *basis, T *obj)
Definition seadOffsetList.h:48
reverseRobustIterator toReverseRobustIterator(T *)
Definition seadAssert.h:44