SMG-Decomp
A decompilation of Super Mario Galaxy 1
Loading...
Searching...
No Matches
Array.hpp
1#pragma once
2
3#include "revolution.h"
4#include "Inline.hpp"
5
6namespace MR {
7 template<class T>
8 class Vector;
9
10 template<class T>
12 public:
13 inline AssignableArray() {
14 mArr = 0;
15 mMaxSize = 0;
16 }
17
18 inline void init(s32 cnt) {
19 mArr = new T[cnt];
20 mMaxSize = cnt;
21 }
22
23 inline void assign(T what, s32 where) {
24 mArr[where] = what;
25 }
26
27 inline T* begin() {
28 return mArr;
29 }
30
31 inline T* end() {
32 return &mArr[mMaxSize];
33 }
34
36 if (mArr) {
37 delete[] mArr;
38 }
39 }
40
41 inline T* getAtIdx(u32 idx) {
42 return mArr[idx];
43 }
44
45 typedef T Item;
46
47 T* mArr; // _0
48 s32 mMaxSize; // _4
49 };
50
51 template<class T, int C>
52 class FixedArray {
53 public:
54 typedef T Item;
55
56 inline ~FixedArray() {
57
58 }
59
60 inline int getSize() {
61 return C;
62 }
63
64 T mArr[C]; // _0
65 };
66
67 template<class T>
68 class Vector {
69 public:
70 inline Vector() {
71 mCount = 0;
72 }
73
74
75 inline ~Vector() {
76
77 }
78
79 inline s32 getCount() {
80 return mCount;
81 }
82
83 inline void init(s32 cnt) {
84 mArray.mArr = new T::Item[cnt];
85 mArray.mMaxSize = cnt;
86 }
87
88 inline void assign(T::Item &pItem, int where) {
89 mArray.mArr[where] = pItem;
90 }
91
92 inline void assignToMax(T::Item &pItem) {
93 assign(pItem, mCount);
94 }
95
96 T::Item* erase(T::Item *pItem);
97
98 void push_back(const T::Item &rItem) NO_INLINE {
99 u32 count = mCount;
100 mCount++;
101 mArray.mArr[count] = rItem;
102 }
103
104 T::Item begin() {
105 return mArray.mArr[0];
106 }
107
108 T::Item end() {
109 return mArray.mArr[mCount];
110 }
111
112 inline T::Item operator[](int idx) const {
113 return mArray.mArr[idx];
114 }
115
116 T mArray; // _0
117 s32 mCount; // _8
118 };
119
120 template<class T, int S>
122 public:
123 class iterator {
124 public:
125 iterator(T *head, T *tail) {
126 mHead = head;
127 mTail = tail;
128 mEnd = head + S;
129 }
130
131 T* mHead; // _0
132 T* mTail; // _4
133 T* mEnd; // _8
134 };
135 };
136};