1#ifndef SEAD_PTR_ARRAY_H_
2#define SEAD_PTR_ARRAY_H_
4#include <basis/seadAssert.h>
5#include <basis/seadTypes.h>
30 bool isEmpty()
const {
return mPtrNum == 0; }
31 bool isFull()
const {
return mPtrNum >= mPtrNumMax; }
34 void erase(s32 pos) {
return erase(pos, 1); }
35 void erase(s32 pos, s32 num);
40 void swap(s32 pos1, s32 pos2)
42 void* tmp =
mPtrs[pos1];
55 if (u32(mPtrNum) <= u32(n))
65 void*
back()
const {
return mPtrs[mPtrNum - 1]; }
90 for (s32 i = 0; i < mPtrNum; ++i)
99 void insert(s32 pos,
void* ptr);
100 void insertArray(s32 pos,
void* array, s32 array_length, s32 elem_size);
114static_assert(
sizeof(
PtrArrayImpl) == 0xC,
"sead::PtrArrayImpl size mismatch");
129 T*
at(s32 n)
const {
return static_cast<T*>(PtrArrayImpl::at(n)); }
130 T*
unsafeAt(s32 n)
const {
return static_cast<T*>(PtrArrayImpl::unsafeAt(n)); }
138 void insert(s32 pos, T* ptr) { PtrArrayImpl::insert(pos, (
void*)ptr); }
139 void insert(s32 pos, T* array, s32 array_length) { PtrArrayImpl::insertArray(pos, (
void*)array, array_length,
sizeof(T)); }
140 void replace(s32 pos, T* ptr) { PtrArrayImpl::replace(pos, (
void*)ptr); }
141 s32 indexOf(
const T* ptr)
const {
return PtrArrayImpl::indexOf(ptr); }
143 void sort() { sort(compareT); }
192 return it1.mPPtr == it2.mPPtr;
197 return !(it1 == it2);
236 return it1.mPPtr == it2.mPPtr;
241 return !(it1 == it2);
267 return iterator(
reinterpret_cast<T**>(mPtrs) + mPtrNum);
278 return constIterator(
reinterpret_cast<T**>(mPtrs) + mPtrNum);
297template <
typename T, s32 N>
304 PtrArray<T>::setBuffer(N, mWork);
Definition seadPtrArray.h:299
u8 mWork[N *sizeof(void *)]
Definition seadPtrArray.h:314
void allocBuffer(s32 ptrNumMax, Heap *heap, s32 alignment=4)
bool tryAllocBuffer(s32 ptrNumMax, Heap *heap, s32 alignment=4)
void setBuffer(s32 ptrNumMax, void *buf)
FixedPtrArray()
Definition seadPtrArray.h:301
Definition seadPtrArray.h:13
void swap(s32 pos1, s32 pos2)
Definition seadPtrArray.h:40
void uniq(CompareCallbackImpl cmp)
void allocBuffer(s32 ptrNumMax, Heap *heap, s32 alignment=4)
Definition seadPtrArray.cpp:26
s32(* CompareCallbackImpl)(const void *, const void *)
Definition seadPtrArray.h:15
void clear()
Definition seadPtrArray.h:36
void insert(s32 pos, void *ptr)
Definition seadPtrArray.cpp:105
void insertArray(s32 pos, void *array, s32 array_length, s32 elem_size)
void replace(s32 pos, void *ptr)
bool tryAllocBuffer(s32 ptrNumMax, Heap *heap, s32 alignment=4)
PtrArrayImpl & operator=(const PtrArrayImpl &)
s32 indexOf(const void *ptr) const
Definition seadPtrArray.h:88
bool isBufferReady() const
Definition seadPtrArray.h:29
void * unsafeAt(s32 n) const
Definition seadPtrArray.h:63
s32 mPtrNumMax
Definition seadPtrArray.h:110
void erase(s32 pos, s32 num)
Definition seadPtrArray.cpp:46
void createVacancy(s32 pos, s32 num)
s32 mPtrNum
Definition seadPtrArray.h:109
s32 maxSize() const
Definition seadPtrArray.h:33
void setBuffer(s32 ptrNumMax, void *buf)
Definition seadPtrArray.cpp:9
s32 size() const
Definition seadPtrArray.h:32
s32 binarySearch(const void *ptr, CompareCallbackImpl cmp) const
void heapSort(CompareCallbackImpl cmp)
Definition seadPtrArray.cpp:167
void * at(s32 n) const
Definition seadPtrArray.h:53
bool equal(const PtrArrayImpl &o, CompareCallbackImpl cmp) const
void ** mPtrs
Definition seadPtrArray.h:111
bool isEmpty() const
Definition seadPtrArray.h:30
s32 search(const void *ptr, CompareCallbackImpl cmp) const
void pushBack(void *ptr)
Definition seadPtrArray.h:67
PtrArrayImpl()
Definition seadPtrArray.h:18
s32 compare(const PtrArrayImpl &o, CompareCallbackImpl cmp) const
bool isFull() const
Definition seadPtrArray.h:31
void erase(s32 pos)
Definition seadPtrArray.h:34
void sort(CompareCallbackImpl cmp)
Definition seadPtrArray.cpp:117
void * back() const
Definition seadPtrArray.h:65
void * find(const void *ptr, CompareCallbackImpl cmp) const
void freeBuffer()
Definition seadPtrArray.cpp:35
void * front() const
Definition seadPtrArray.h:64
void pushFront(void *ptr)
Definition seadPtrArray.h:80
void shuffle(Random *random)
Definition seadPtrArray.cpp:73
bool checkInsert(s32 pos, s32 num)
Definition seadPtrArray.cpp:85
Definition seadPtrArray.h:210
friend bool operator!=(const constIterator &it1, const constIterator &it2)
Definition seadPtrArray.h:239
const T * operator->() const
Definition seadPtrArray.h:229
friend bool operator==(const constIterator &it1, const constIterator &it2)
Definition seadPtrArray.h:234
const T & operator*() const
Definition seadPtrArray.h:224
const T * getPtr() const
Definition seadPtrArray.h:244
constIterator & operator++()
Definition seadPtrArray.h:218
const T *const * mPPtr
Definition seadPtrArray.h:250
constIterator(const T *const *pptr)
Definition seadPtrArray.h:212
Definition seadPtrArray.h:166
T & operator*() const
Definition seadPtrArray.h:180
T * operator->() const
Definition seadPtrArray.h:185
friend bool operator!=(const iterator &it1, const iterator &it2)
Definition seadPtrArray.h:195
T * getPtr() const
Definition seadPtrArray.h:200
iterator & operator++()
Definition seadPtrArray.h:174
friend bool operator==(const iterator &it1, const iterator &it2)
Definition seadPtrArray.h:190
iterator(T *const *pptr)
Definition seadPtrArray.h:168
T *const * mPPtr
Definition seadPtrArray.h:206
Definition seadPtrArray.h:257
Definition seadPtrArray.h:254
Definition seadPtrArray.h:119
void * getWork() const
Definition seadPtrArray.h:142
PtrArray()
Definition seadPtrArray.h:124
s32 indexOf(const T *ptr) const
Definition seadPtrArray.h:141
void insert(s32 pos, T *array, s32 array_length)
Definition seadPtrArray.h:139
T * operator[](s32 n) const
Definition seadPtrArray.h:131
bool operator>(const PtrArray< T > &) const
constIterator toConstIterator(s32) const
void heapSort()
Definition seadPtrArray.h:145
constIterator constEnd() const
Definition seadPtrArray.h:276
T * popFront()
Definition seadPtrArray.h:137
T * find(const T *ptr, CompareCallback cmp) const
bool operator==(const PtrArray< T > &) const
void uniq(CompareCallback cmp)
reverseIterator toReverseIterator(s32) const
T * find(const T *ptr) const
s32 binarySearch(const T *ptr) const
s32 compare(const PtrArray< T > *o, CompareCallback cmp) const
Definition seadPtrArray.h:148
void pushFront(T *ptr)
Definition seadPtrArray.h:135
iterator toIterator(s32) const
iterator end() const
Definition seadPtrArray.h:265
constIterator constBegin() const
Definition seadPtrArray.h:272
reverseIterator reverseEnd() const
T * popBack()
Definition seadPtrArray.h:136
s32 binarySearch(const T *ptr, CompareCallback cmp) const
bool operator<(const PtrArray< T > &) const
void sort(CompareCallback cmp)
Definition seadPtrArray.h:144
void pushBack(T *ptr)
Definition seadPtrArray.h:134
void insert(s32 pos, T *ptr)
Definition seadPtrArray.h:138
s32 search(const T *ptr, CompareCallback cmp) const
reverseConstIterator reverseConstEnd() const
T * back() const
Definition seadPtrArray.h:133
void sort()
Definition seadPtrArray.h:143
s32(* CompareCallback)(const T *, const T *)
Definition seadPtrArray.h:121
T * at(s32 n) const
Definition seadPtrArray.h:129
bool equal(const PtrArray< T > *o, CompareCallback cmp) const
Definition seadPtrArray.h:147
reverseConstIterator toReverseConstIterator(s32) const
bool operator<=(const PtrArray< T > &) const
T * unsafeAt(s32 n) const
Definition seadPtrArray.h:130
s32 search(const T *ptr) const
reverseConstIterator reverseConstBegin() const
iterator begin() const
Definition seadPtrArray.h:260
reverseIterator reverseBegin() const
bool operator!=(const PtrArray< T > &) const
static s32 compareT(const T *, const T *)
T * front() const
Definition seadPtrArray.h:132
void heapSort(CompareCallback cmp)
Definition seadPtrArray.h:146
void replace(s32 pos, T *ptr)
Definition seadPtrArray.h:140
bool operator>=(const PtrArray< T > &) const
Definition seadRandom.h:9
Definition seadAssert.h:44
#define SEAD_ASSERT_MSG(condition, format,...)
Definition seadAssert.h:33