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); }
39 void swap(s32 pos1, s32 pos2);
48 if (u32(mPtrNum) <= u32(n))
58 void*
back()
const {
return mPtrs[mPtrNum - 1]; }
82 for (s32 i = 0; i < mPtrNum; ++i)
92 void insertArray(s32 pos,
void* array, s32 array_length, s32 elem_size);
106static_assert(
sizeof(
PtrArrayImpl) == 0xC,
"sead::PtrArrayImpl size mismatch");
121 T*
at(s32 n)
const {
return static_cast<T*>(PtrArrayImpl::at(n)); }
122 T*
unsafeAt(s32 n)
const {
return static_cast<T*>(PtrArrayImpl::unsafeAt(n)); }
130 void insert(s32 pos, T* ptr) { PtrArrayImpl::insert(pos, (
void*)ptr); }
131 void insert(s32 pos, T* array, s32 array_length) { PtrArrayImpl::insertArray(pos, (
void*)array, array_length,
sizeof(T)); }
132 void replace(s32 pos, T* ptr) { PtrArrayImpl::replace(pos, (
void*)ptr); }
133 s32 indexOf(
const T* ptr)
const {
return PtrArrayImpl::indexOf(ptr); }
135 void sort() { sort(compareT); }
184 return it1.mPPtr == it2.mPPtr;
189 return !(it1 == it2);
228 return it1.mPPtr == it2.mPPtr;
233 return !(it1 == it2);
259 return iterator(
reinterpret_cast<T**>(mPtrs) + mPtrNum);
270 return constIterator(
reinterpret_cast<T**>(mPtrs) + mPtrNum);
289template <
typename T, s32 N>
296 PtrArray<T>::setBuffer(N, mWork);
Definition seadPtrArray.h:291
u8 mWork[N *sizeof(void *)]
Definition seadPtrArray.h:306
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:293
Definition seadPtrArray.h:13
void swap(s32 pos1, s32 pos2)
void uniq(CompareCallbackImpl cmp)
void allocBuffer(s32 ptrNumMax, Heap *heap, s32 alignment=4)
Definition seadPtrArray.cpp:24
s32(* CompareCallbackImpl)(const void *, const void *)
Definition seadPtrArray.h:15
void clear()
Definition seadPtrArray.h:36
void insert(s32 pos, void *ptr)
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:80
bool isBufferReady() const
Definition seadPtrArray.h:29
void * unsafeAt(s32 n) const
Definition seadPtrArray.h:56
s32 mPtrNumMax
Definition seadPtrArray.h:102
void erase(s32 pos, s32 num)
void createVacancy(s32 pos, s32 num)
s32 mPtrNum
Definition seadPtrArray.h:101
s32 maxSize() const
Definition seadPtrArray.h:33
void setBuffer(s32 ptrNumMax, void *buf)
Definition seadPtrArray.cpp:7
s32 size() const
Definition seadPtrArray.h:32
s32 binarySearch(const void *ptr, CompareCallbackImpl cmp) const
void heapSort(CompareCallbackImpl cmp)
void * at(s32 n) const
Definition seadPtrArray.h:46
bool equal(const PtrArrayImpl &o, CompareCallbackImpl cmp) const
void ** mPtrs
Definition seadPtrArray.h:103
bool isEmpty() const
Definition seadPtrArray.h:30
s32 search(const void *ptr, CompareCallbackImpl cmp) const
void pushBack(void *ptr)
Definition seadPtrArray.h:60
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:44
void * back() const
Definition seadPtrArray.h:58
void * find(const void *ptr, CompareCallbackImpl cmp) const
void freeBuffer()
Definition seadPtrArray.cpp:33
void * front() const
Definition seadPtrArray.h:57
void pushFront(void *ptr)
Definition seadPtrArray.h:72
void shuffle(Random *random)
bool checkInsert(s32 pos, s32 num)
Definition seadPtrArray.h:202
friend bool operator!=(const constIterator &it1, const constIterator &it2)
Definition seadPtrArray.h:231
const T * operator->() const
Definition seadPtrArray.h:221
friend bool operator==(const constIterator &it1, const constIterator &it2)
Definition seadPtrArray.h:226
const T & operator*() const
Definition seadPtrArray.h:216
const T * getPtr() const
Definition seadPtrArray.h:236
constIterator & operator++()
Definition seadPtrArray.h:210
const T *const * mPPtr
Definition seadPtrArray.h:242
constIterator(const T *const *pptr)
Definition seadPtrArray.h:204
Definition seadPtrArray.h:158
T & operator*() const
Definition seadPtrArray.h:172
T * operator->() const
Definition seadPtrArray.h:177
friend bool operator!=(const iterator &it1, const iterator &it2)
Definition seadPtrArray.h:187
T * getPtr() const
Definition seadPtrArray.h:192
iterator & operator++()
Definition seadPtrArray.h:166
friend bool operator==(const iterator &it1, const iterator &it2)
Definition seadPtrArray.h:182
iterator(T *const *pptr)
Definition seadPtrArray.h:160
T *const * mPPtr
Definition seadPtrArray.h:198
Definition seadPtrArray.h:249
Definition seadPtrArray.h:246
Definition seadPtrArray.h:111
void * getWork() const
Definition seadPtrArray.h:134
PtrArray()
Definition seadPtrArray.h:116
s32 indexOf(const T *ptr) const
Definition seadPtrArray.h:133
void insert(s32 pos, T *array, s32 array_length)
Definition seadPtrArray.h:131
T * operator[](s32 n) const
Definition seadPtrArray.h:123
bool operator>(const PtrArray< T > &) const
constIterator toConstIterator(s32) const
void heapSort()
Definition seadPtrArray.h:137
constIterator constEnd() const
Definition seadPtrArray.h:268
T * popFront()
Definition seadPtrArray.h:129
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:140
void pushFront(T *ptr)
Definition seadPtrArray.h:127
iterator toIterator(s32) const
iterator end() const
Definition seadPtrArray.h:257
constIterator constBegin() const
Definition seadPtrArray.h:264
reverseIterator reverseEnd() const
T * popBack()
Definition seadPtrArray.h:128
s32 binarySearch(const T *ptr, CompareCallback cmp) const
bool operator<(const PtrArray< T > &) const
void sort(CompareCallback cmp)
Definition seadPtrArray.h:136
void pushBack(T *ptr)
Definition seadPtrArray.h:126
void insert(s32 pos, T *ptr)
Definition seadPtrArray.h:130
s32 search(const T *ptr, CompareCallback cmp) const
reverseConstIterator reverseConstEnd() const
T * back() const
Definition seadPtrArray.h:125
void sort()
Definition seadPtrArray.h:135
s32(* CompareCallback)(const T *, const T *)
Definition seadPtrArray.h:113
T * at(s32 n) const
Definition seadPtrArray.h:121
bool equal(const PtrArray< T > *o, CompareCallback cmp) const
Definition seadPtrArray.h:139
reverseConstIterator toReverseConstIterator(s32) const
bool operator<=(const PtrArray< T > &) const
T * unsafeAt(s32 n) const
Definition seadPtrArray.h:122
s32 search(const T *ptr) const
reverseConstIterator reverseConstBegin() const
iterator begin() const
Definition seadPtrArray.h:252
reverseIterator reverseBegin() const
bool operator!=(const PtrArray< T > &) const
static s32 compareT(const T *, const T *)
T * front() const
Definition seadPtrArray.h:124
void heapSort(CompareCallback cmp)
Definition seadPtrArray.h:138
void replace(s32 pos, T *ptr)
Definition seadPtrArray.h:132
bool operator>=(const PtrArray< T > &) const
Definition seadRandom.h:9
Definition seadAssert.h:44
#define SEAD_ASSERT_MSG(condition, format,...)
Definition seadAssert.h:33