sead
Loading...
Searching...
No Matches
seadFreeList.h
Go to the documentation of this file.
1#ifndef SEAD_FREE_LIST_H_
2#define SEAD_FREE_LIST_H_
3
4#include <basis/seadAssert.h>
5#include <basis/seadTypes.h>
6
7namespace sead {
8
10{
11public:
13 : mFree(nullptr)
14 , mWork(nullptr)
15 {
16 }
17
18 void init(void* work, s32 elem_size, s32 num)
19 {
20 SEAD_ASSERT(work);
21 SEAD_ASSERT(elem_size > 0 && elem_size % 4 == 0);
22 SEAD_ASSERT(num > 0);
23
24 const s32 idx_multiplier = elem_size / 4;
25
26 mFree = work;
27
28 for (s32 i = 0; i < num - 1; ++i)
29 static_cast<void**>(work)[idx_multiplier * i] = &static_cast<void**>(work)[idx_multiplier * (i + 1)];
30
31 static_cast<void**>(work)[(num - 1) * idx_multiplier] = nullptr;
32
33 mWork = work;
34 }
35
36 void* get()
37 {
38 if (mFree == nullptr)
39 return nullptr;
40
41 void* ptr = mFree;
42 mFree = *static_cast<void**>(mFree);
43 return ptr;
44 }
45
46 void cleanup()
47 {
48 mFree = nullptr;
49 mWork = nullptr;
50 }
51
52 void* work() const { return mWork; }
53
54 void put(void* ptr)
55 {
56 *static_cast<void**>(ptr) = mFree;
57 mFree = ptr;
58 }
59
60private:
61 void* mFree;
62 void* mWork;
63};
64
65} // namespace sead
66
67#endif // SEAD_FREE_LIST_H_
Definition seadFreeList.h:10
void * mFree
Definition seadFreeList.h:61
void put(void *ptr)
Definition seadFreeList.h:54
void init(void *work, s32 elem_size, s32 num)
Definition seadFreeList.h:18
FreeList()
Definition seadFreeList.h:12
void * work() const
Definition seadFreeList.h:52
void * mWork
Definition seadFreeList.h:62
void * get()
Definition seadFreeList.h:36
void cleanup()
Definition seadFreeList.h:46
Definition seadAssert.h:44
#define SEAD_ASSERT(condition)
Definition seadAssert.h:24