SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
NameObjCategoryList.cpp
1#include "Game/NameObj/NameObjCategoryList.hpp"
2
3NameObjCategoryList::NameObjCategoryList(u32 count, const CategoryListInitialTable *pTable, func func_ptr, bool a4, const char * /* unused */) {
4 func new_ptr;
5 new_ptr = func_ptr;
6 mDelegator = new NameObjRealDelegator<func>(new_ptr);
7 _D = a4;
8 _C = 0;
9 initTable(count, pTable);
10}
11
12NameObjCategoryList::NameObjCategoryList(u32 count, const CategoryListInitialTable *pTable, func_const func_ptr, bool a4, const char * /* unused */) {
13 func_const new_ptr;
14 new_ptr = func_ptr;
15 mDelegatorConst = new NameObjRealDelegator<func_const>(new_ptr);
16 _D = a4;
17 _C = 0;
18 initTable(count, pTable);
19}
20
21void NameObjCategoryList::execute(int idx) {
22 NameObjCategoryList::CategoryInfo* inf = &mCategoryInfo.mArr[idx];
23
24 if (inf->_8 && inf->_C) {
25 (*inf->_C)();
26 }
27
28 NameObj** arr = inf->mNameObjArr.mArr;
29
30 while (arr != &inf->mNameObjArr.mArr[inf->_8]) {
31 (*mDelegator)(*arr);
32 arr++;
33 }
34}
35
36void NameObjCategoryList::incrementCheck(NameObj */*unused*/, int index) {
37 mCategoryInfo.mArr[index].mCheck++;
38}
39
40void NameObjCategoryList::allocateBuffer() {
41 if (_D) {
42 for (s32 i = 0; i < mCategoryInfo.mMaxSize; i++) {
43 NameObjCategoryList::CategoryInfo* inf = &mCategoryInfo.mArr[i];
44 u32 size = inf->mCheck;
45 NameObj** nameObjArr = new NameObj*[size];
46 MR::AssignableArray<NameObj*>* arr = &mCategoryInfo.mArr[i].mNameObjArr;
47 arr->mArr = nameObjArr;
48 arr->mMaxSize = size;
49 }
50
51 _C = 1;
52 }
53}
54
55void NameObjCategoryList::add(NameObj *pObj, int idx) {
56 NameObjCategoryList::CategoryInfo* inf = &mCategoryInfo.mArr[idx];
57 s32 cnt = inf->_8++;
58 inf->mNameObjArr.mArr[cnt] = pObj;
59}
60
61// NameObjCategoryList::remove
62
63void NameObjCategoryList::registerExecuteBeforeFunction(const MR::FunctorBase &rFunc, int idx) {
64 NameObjCategoryList::CategoryInfo* inf = &mCategoryInfo.mArr[idx];
65 inf->_C = rFunc.clone(0);
66}
67
68void NameObjCategoryList::initTable(u32 count, const CategoryListInitialTable *pTable) {
69 mCategoryInfo.mArr = new CategoryInfo[count];
70 mCategoryInfo.mMaxSize = count;
71
72 NameObjCategoryList::CategoryInfo* curInf = &mCategoryInfo.mArr[0];
73
74 while ((curInf != &mCategoryInfo.mArr[mCategoryInfo.mMaxSize])) {
75 curInf->_C = 0;
76 curInf++;
77 }
78
79 const CategoryListInitialTable* ent = &pTable[0];
80
81 while(ent->mIndex != -1) {
82 if (!_D) {
83 u32 size = ent->mCount;
84 NameObj** arr = new NameObj*[size];
85 NameObjCategoryList::CategoryInfo* inf = &mCategoryInfo.mArr[ent->mIndex];
86 inf->mNameObjArr.mArr = arr;
87 inf->mNameObjArr.mMaxSize = size;
88 _C = 1;
89 }
90
91 mCategoryInfo.mArr[ent->mIndex].mCheck = 0;
92
93 ent++;
94 }
95}
96
97NameObjCategoryList::CategoryInfo::CategoryInfo() {
98 mNameObjArr.mArr = 0;
99 mNameObjArr.mMaxSize = 0;
100 _8 = 0;
101}
102
103NameObjCategoryList::CategoryInfo::~CategoryInfo() {
104
105}
106
107NameObjCategoryList::~NameObjCategoryList() {
108 delete mDelegator;
109}
The most basic form of an object.
Definition NameObj.hpp:11