sead
Loading...
Searching...
No Matches
seadCoreInfo.h
Go to the documentation of this file.
1#ifndef SEAD_CORE_INFO_H_
2#define SEAD_CORE_INFO_H_
3
4#include <basis/seadAssert.h>
5#include <basis/seadTypes.h>
6
7#include <cafe/os.h>
8
9namespace sead {
10
11class CoreId
12{
13public:
56 static_assert(sizeof(ValueType) == 4, "sead::CoreId::ValueType size mismatch");
57
58public:
60 : mValue(cMain)
61 {
62 }
63
65 : mValue(value)
66 {
67 }
68
69 CoreId(s32 value)
70 {
71 SEAD_ASSERT_MSG(value >= cMain && value < s32(cEnumMax) + 1, "range over: %d, [%d - %d)", value, s32(cMain), s32(cEnumMax) + 1);
72 mValue = value;
73 }
74
76 {
77 return ValueType(mValue);
78 }
79
80 operator s32() const
81 {
82 return mValue;
83 }
84
85 bool operator==(ValueType value) const
86 {
87 return this->value() == value;
88 }
89
90protected:
92};
93static_assert(sizeof(CoreId) == 4, "sead::CoreId size mismatch");
94
96{
97public:
99 : mMask(0)
100 {
101 }
102
103 explicit CoreIdMask(CoreId id)
104 : mId(id)
105 {
106 mMask = getCoreMask_(mId);
107 }
108
110 {
111 mMask = getCoreMask_(id_1) |
112 getCoreMask_(id_2);
113 }
114
115 CoreIdMask(CoreId id_1, CoreId id_2, CoreId id_3)
116 {
117 mMask = getCoreMask_(id_1) |
118 getCoreMask_(id_2) |
119 getCoreMask_(id_3);
120 }
121
122 void set(u32 mask)
123 {
124 mMask = mask;
125 }
126
127 operator u32() const
128 {
129 return mMask;
130 }
131
133 {
135 return *this;
136 }
137
138 bool isOn(const CoreId& id) const
139 {
140 return mMask & getCoreMask_(id);
141 }
142
144 {
145 mMask &= ~getCoreMask_(id);
146 }
147
149 {
151 }
152
153 void clear()
154 {
155 mMask = 0;
156 }
157
159
160protected:
162 {
163 return 1u << s32(id);
164 }
165
166protected:
169};
170static_assert(sizeof(CoreIdMask) == 8, "sead::CoreIdMask size mismatch");
171
173{
174public:
175 static void configure();
176 static void dump();
177
179 {
180 return sNumCores;
181 }
182
184 {
185 return sPlatformCoreId[CoreId::cMain];
186 }
187
189 {
190 return sPlatformCoreId[s32(id)];
191 }
192
194 {
195 return getCoreIdFromPlatformCoreId(OSGetCoreId());
196 }
197
199
201 {
203 }
204
206
208 {
209 CoreIdMask mask;
210 mask.set((1 << sNumCores) - 1);
211 return mask;
212 }
213
215 {
217 mask.set(u32(mask) - 1);
218 return mask;
219 }
220
221protected:
225};
226
227} // namespace sead
228
229#endif // SEAD_CORE_INFO_H_
Definition seadCoreInfo.h:96
CoreIdMask(CoreId id_1, CoreId id_2)
Definition seadCoreInfo.h:109
u32 mMask
Definition seadCoreInfo.h:167
void set(u32 mask)
Definition seadCoreInfo.h:122
u32 getCoreMask_(CoreId id) const
Definition seadCoreInfo.h:161
CoreId mId
Definition seadCoreInfo.h:168
CoreIdMask(CoreId id)
Definition seadCoreInfo.h:103
CoreIdMask(CoreId id_1, CoreId id_2, CoreId id_3)
Definition seadCoreInfo.h:115
CoreIdMask()
Definition seadCoreInfo.h:98
Definition seadCoreInfo.h:12
CoreId(ValueType value)
Definition seadCoreInfo.h:64
CoreId()
Definition seadCoreInfo.h:59
ValueType value() const
Definition seadCoreInfo.h:75
ValueType
Definition seadCoreInfo.h:15
@ cSub10
Definition seadCoreInfo.h:27
@ cEnumStart
Definition seadCoreInfo.h:53
@ cSub21
Definition seadCoreInfo.h:38
@ cDontUseThis_MemSize32bit
Definition seadCoreInfo.h:52
@ cSub12
Definition seadCoreInfo.h:29
@ cMain
Definition seadCoreInfo.h:17
@ cSub19
Definition seadCoreInfo.h:36
@ cSub16
Definition seadCoreInfo.h:33
@ cSub32
Definition seadCoreInfo.h:49
@ cSub7
Definition seadCoreInfo.h:24
@ cSub24
Definition seadCoreInfo.h:41
@ cSub6
Definition seadCoreInfo.h:23
@ cSub5
Definition seadCoreInfo.h:22
@ cSub27
Definition seadCoreInfo.h:44
@ cSub13
Definition seadCoreInfo.h:30
@ cSub15
Definition seadCoreInfo.h:32
@ cSub22
Definition seadCoreInfo.h:39
@ cDontUseThis_StartNumMinus1
Definition seadCoreInfo.h:16
@ cSub11
Definition seadCoreInfo.h:28
@ cSub20
Definition seadCoreInfo.h:37
@ cSub25
Definition seadCoreInfo.h:42
@ cSub3
Definition seadCoreInfo.h:20
@ cSub29
Definition seadCoreInfo.h:46
@ cSub2
Definition seadCoreInfo.h:19
@ cSub17
Definition seadCoreInfo.h:34
@ cUndef
Definition seadCoreInfo.h:50
@ cSub4
Definition seadCoreInfo.h:21
@ cSub23
Definition seadCoreInfo.h:40
@ cSub8
Definition seadCoreInfo.h:25
@ cDontUseThis_MaxNumPlus1
Definition seadCoreInfo.h:51
@ cEnumMax
Definition seadCoreInfo.h:54
@ cSub28
Definition seadCoreInfo.h:45
@ cSub26
Definition seadCoreInfo.h:43
@ cSub30
Definition seadCoreInfo.h:47
@ cSub1
Definition seadCoreInfo.h:18
@ cSub14
Definition seadCoreInfo.h:31
@ cSub9
Definition seadCoreInfo.h:26
@ cSub31
Definition seadCoreInfo.h:48
@ cSub18
Definition seadCoreInfo.h:35
CoreId(s32 value)
Definition seadCoreInfo.h:69
Definition seadCoreInfo.h:173
static CoreIdMask getMaskAll()
Definition seadCoreInfo.h:207
static CoreId getCoreIdFromPlatformCoreId(u32 id)
Definition seadCoreInfo.h:200
static CoreIdMask getMaskSubAll()
Definition seadCoreInfo.h:214
static u32 sNumCores
Definition seadCoreInfo.h:222
static void dump()
static u32 getPlatformCoreId(CoreId id)
Definition seadCoreInfo.h:188
static u32 getPlatformMaskFromCoreIdMask(const CoreIdMask &mask)
static u32 getNumCores()
Definition seadCoreInfo.h:178
static void configure()
static u32 getPlatformMask(CoreId id)
static u32 sPlatformCoreId[32]
Definition seadCoreInfo.h:223
static CoreId sCoreIdFromPlatformCoreIdTable[32]
Definition seadCoreInfo.h:224
static u32 getPlatformMainCoreId()
Definition seadCoreInfo.h:183
static CoreId getCurrentCoreId()
Definition seadCoreInfo.h:193
Definition seadAssert.h:44
#define SEAD_ASSERT_MSG(condition, format,...)
Definition seadAssert.h:33