4#include <basis/seadAssert.h>
5#include <basis/seadNew.h>
6#include <container/seadFreeList.h>
7#include <container/seadPtrArray.h>
17 ObjArray(s32 max_num,
void* buf) { setBuffer(max_num, buf); }
25 SEAD_ASSERT_MSG(
false,
"capacity[%d] must be larger than zero", capacity);
29 setBuffer(capacity,
new (heap, alignment) u8[calculateWorkBufferSize(capacity)]);
38 SEAD_ASSERT_MSG(
false,
"capacity[%d] must be larger than zero", capacity);
42 auto* buf =
new (heap, alignment) u8[calculateWorkBufferSize(capacity)];
46 setBuffer(capacity, buf);
58 mFreeList.init(buf, ElementSize, max_num);
59 PtrArrayImpl::setBuffer(max_num,
reinterpret_cast<u8*>(buf) + ElementSize * max_num);
77 T*
at(s32 pos)
const {
return static_cast<T*>(PtrArrayImpl::at(pos)); }
78 T*
unsafeAt(s32 pos)
const {
return static_cast<T*>(PtrArrayImpl::unsafeAt(pos)); }
79 T*
operator()(s32 pos)
const {
return unsafeAt(pos); }
80 T*
operator[](s32 pos)
const {
return at(pos); }
83 T*
front()
const {
return at(0); }
84 T*
back()
const {
return at(mPtrNum - 1); }
99 template <
class... Args>
112 void insert(s32 pos,
const T& item) { PtrArrayImpl::insert(pos, alloc(item)); }
114 void erase(
int index) { erase(index, 1); }
118 if (index + count <= size())
120 for (
int i = index; i < index + count; ++i)
122 auto* ptr = unsafeAt(i);
127 PtrArrayImpl::erase(index, count);
132 for (s32 i = 0; i < mPtrNum; ++i)
134 auto* ptr = unsafeAt(i);
155 return PtrArrayImpl::compare(other, cmp);
158 s32 binarySearch(
const T* ptr)
const {
return PtrArrayImpl::binarySearch(ptr, compareT); }
161 return PtrArrayImpl::binarySearch(ptr, cmp);
216 T**
data()
const {
return reinterpret_cast<T**>(
mPtrs); }
230 return n * (ElementSize +
sizeof(T*));
239 return new (storage) T(item);
244 return compareT(
static_cast<
const T*>(a),
static_cast<
const T*>(b));
260template <
typename T, s32 N>
268 void allocBuffer(s32 ptrNumMax,
Heap* heap, s32 alignment = cDefaultAlignment) =
delete;
Definition seadObjArray.h:262
u8 mWork[ObjArray< T >::calculateWorkBufferSize(N)]
Definition seadObjArray.h:273
void allocBuffer(s32 ptrNumMax, Heap *heap, s32 alignment=cDefaultAlignment)=delete
FixedObjArray()
Definition seadObjArray.h:264
void setBuffer(s32 ptrNumMax, void *buf)=delete
bool tryAllocBuffer(s32 ptrNumMax, Heap *heap, s32 alignment=cDefaultAlignment)=delete
Definition seadFreeList.h:10
void put(void *ptr)
Definition seadFreeList.h:54
void * work() const
Definition seadFreeList.h:52
void * get()
Definition seadFreeList.h:36
void cleanup()
Definition seadFreeList.h:46
Definition seadObjArray.h:196
constIterator & operator++()
Definition seadObjArray.h:201
const T *const * mPPtr
Definition seadObjArray.h:210
const T & operator*() const
Definition seadObjArray.h:206
bool operator==(const constIterator &other) const
Definition seadObjArray.h:199
bool operator!=(const constIterator &other) const
Definition seadObjArray.h:200
const T * operator->() const
Definition seadObjArray.h:207
constIterator(const T *const *pptr)
Definition seadObjArray.h:198
Definition seadObjArray.h:175
bool operator!=(const iterator &other) const
Definition seadObjArray.h:179
T * operator->() const
Definition seadObjArray.h:186
T & operator*() const
Definition seadObjArray.h:185
iterator & operator++()
Definition seadObjArray.h:180
T *const * mPPtr
Definition seadObjArray.h:189
iterator(T *const *pptr)
Definition seadObjArray.h:177
bool operator==(const iterator &other) const
Definition seadObjArray.h:178
Definition seadObjArray.h:14
static constexpr size_t calculateWorkBufferSize(size_t n)
Definition seadObjArray.h:228
void heapSort()
Definition seadObjArray.h:145
static s32 compareT(const T *a, const T *b)
Definition seadObjArray.h:247
void insert(s32 pos, const T &item)
Definition seadObjArray.h:112
void pushBack(const T &item)
Definition seadObjArray.h:86
void erase(int index, int count)
Definition seadObjArray.h:116
bool operator<=(const ObjArray &other) const
Definition seadObjArray.h:167
void erase(int index)
Definition seadObjArray.h:114
void sort(CompareCallback cmp)
Definition seadObjArray.h:144
s32 compare(const ObjArray &other, CompareCallback cmp) const
Definition seadObjArray.h:153
sead::FreeList mFreeList
Definition seadObjArray.h:257
bool operator==(const ObjArray &other) const
Definition seadObjArray.h:164
void freeBuffer()
Definition seadObjArray.h:62
constIterator constEnd() const
Definition seadObjArray.h:214
void uniq()
Definition seadObjArray.h:171
bool operator!=(const ObjArray &other) const
Definition seadObjArray.h:165
T ** data() const
Definition seadObjArray.h:216
T * at(s32 pos) const
Definition seadObjArray.h:77
T * front() const
Definition seadObjArray.h:83
constIterator constBegin() const
Definition seadObjArray.h:213
T * alloc(const T &item)
Definition seadObjArray.h:234
T * emplaceBack(Args &&... args)
Definition seadObjArray.h:100
bool operator>=(const ObjArray &other) const
Definition seadObjArray.h:169
void setBuffer(s32 max_num, void *buf)
Definition seadObjArray.h:50
iterator end() const
Definition seadObjArray.h:193
void sort()
Definition seadObjArray.h:143
T * operator[](s32 pos) const
Definition seadObjArray.h:80
iterator begin() const
Definition seadObjArray.h:192
bool tryAllocBuffer(s32 capacity, Heap *heap, s32 alignment=cDefaultAlignment)
Definition seadObjArray.h:32
static constexpr size_t ElementSize
Definition seadObjArray.h:226
ObjArray(s32 max_num, void *buf)
Definition seadObjArray.h:17
bool equal(const ObjArray &other, CompareCallback cmp) const
Definition seadObjArray.h:148
void allocBuffer(s32 capacity, Heap *heap, s32 alignment=cDefaultAlignment)
Definition seadObjArray.h:19
void clear()
Definition seadObjArray.h:130
T * back() const
Definition seadObjArray.h:84
void uniq(CompareCallback cmp)
Definition seadObjArray.h:172
T * operator()(s32 pos) const
Definition seadObjArray.h:79
bool operator>(const ObjArray &other) const
Definition seadObjArray.h:168
s32 binarySearch(const T *ptr, CompareCallback cmp) const
Definition seadObjArray.h:159
static s32 compareT(const void *a, const void *b)
Definition seadObjArray.h:242
T * unsafeAt(s32 pos) const
Definition seadObjArray.h:78
void heapSort(CompareCallback cmp)
Definition seadObjArray.h:146
bool operator<(const ObjArray &other) const
Definition seadObjArray.h:166
s32 binarySearch(const T *ptr) const
Definition seadObjArray.h:158
Definition seadPtrArray.h:13
void uniq(CompareCallbackImpl cmp)
bool isBufferReady() const
Definition seadPtrArray.h:29
void heapSort(CompareCallbackImpl cmp)
bool equal(const PtrArrayImpl &o, CompareCallbackImpl cmp) const
void ** mPtrs
Definition seadPtrArray.h:103
void pushBack(void *ptr)
Definition seadPtrArray.h:60
bool isFull() const
Definition seadPtrArray.h:31
void sort(CompareCallbackImpl cmp)
Definition seadPtrArray.cpp:44
Definition seadAssert.h:44
#define SEAD_ASSERT(condition)
Definition seadAssert.h:24
#define SEAD_ASSERT_MSG(condition, format,...)
Definition seadAssert.h:33
Definition seadObjArray.h:220
void * next_node
Definition seadObjArray.h:221
T elem
Definition seadObjArray.h:222