sead
Loading...
Searching...
No Matches
seadAtomicCafe.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <cafe/os/OSAtomic.h>
4
5namespace sead {
6
7template <typename T>
8inline T
10{
11 // I hope this is correct
12 return *reinterpret_cast<const volatile T*>(&mValue);
13}
14
15template <typename T>
16inline void
18{
19 // I hope this is correct
20 *reinterpret_cast<volatile T*>(&mValue) = val;
21}
22
23template <typename T>
24inline T
26{
27 return OSAddAtomic(reinterpret_cast<volatile OSAtomicVar*>(&mValue), val);
28}
29
30template <typename T>
31inline T
33{
34 return OSIncAtomic(reinterpret_cast<volatile OSAtomicVar*>(&mValue));
35}
36
37template <typename T>
38inline T
40{
41 return OSDecAtomic(reinterpret_cast<volatile OSAtomicVar*>(&mValue));
42}
43
44template <typename T>
45inline T
47{
48 return OSOrAtomic(reinterpret_cast<volatile OSAtomicVar*>(&mValue), mask);
49}
50
51template <typename T>
52inline T
54{
55 return OSAndAtomic(reinterpret_cast<volatile OSAtomicVar*>(&mValue), mask);
56}
57
58template <typename T>
59inline T
61{
62 return OSXorAtomic(reinterpret_cast<volatile OSAtomicVar*>(&mValue), mask);
63}
64
65template <typename T>
66inline T
68{
69 return OSSwapAtomic(reinterpret_cast<volatile OSAtomicVar*>(&mValue), val);
70}
71
72template <typename T>
73inline bool
75{
76 return OSCompareAndSwapAtomic(reinterpret_cast<volatile OSAtomicVar*>(&mValue), cmp_val, new_val);
77}
78
79template <typename T>
80inline bool
82{
83 return OSCompareAndSwapAtomicEx(reinterpret_cast<volatile OSAtomicVar*>(&mValue), cmp_val, new_val, reinterpret_cast<u32*>(orig_val));
84}
85
86template <typename T>
87inline bool
89{
90 return OSTestAndSetAtomic(reinterpret_cast<volatile OSAtomicVar*>(&mValue), bitnum);
91}
92
93template <typename T>
94inline bool
96{
97 return OSTestAndClearAtomic(reinterpret_cast<volatile OSAtomicVar*>(&mValue), bitnum);
98}
99
100template <typename T>
101inline T
103{
104 return OSGetAtomic64(reinterpret_cast<volatile OSAtomicVar64*>(&mValue));
105}
106
107template <typename T>
108inline void
110{
111 OSSetAtomic64(reinterpret_cast<volatile OSAtomicVar64*>(&mValue), val);
112}
113
114template <typename T>
115inline T
117{
118 return OSAddAtomic64(reinterpret_cast<volatile OSAtomicVar64*>(&mValue), val);
119}
120
121template <typename T>
122inline T
124{
125 return OSIncAtomic64(reinterpret_cast<volatile OSAtomicVar64*>(&mValue));
126}
127
128template <typename T>
129inline T
131{
132 return OSDecAtomic64(reinterpret_cast<volatile OSAtomicVar64*>(&mValue));
133}
134
135template <typename T>
136inline T
138{
139 return OSOrAtomic64(reinterpret_cast<volatile OSAtomicVar64*>(&mValue), mask);
140}
141
142template <typename T>
143inline T
145{
146 return OSAndAtomic64(reinterpret_cast<volatile OSAtomicVar64*>(&mValue), mask);
147}
148
149template <typename T>
150inline T
152{
153 return OSXorAtomic64(reinterpret_cast<volatile OSAtomicVar64*>(&mValue), mask);
154}
155
156template <typename T>
157inline T
159{
160 return OSSwapAtomic64(reinterpret_cast<volatile OSAtomicVar64*>(&mValue), val);
161}
162
163template <typename T>
164inline bool
166{
167 return OSCompareAndSwapAtomic64(reinterpret_cast<volatile OSAtomicVar64*>(&mValue), cmp_val, new_val);
168}
169
170template <typename T>
171inline bool
173{
174 return OSCompareAndSwapAtomicEx64(reinterpret_cast<volatile OSAtomicVar64*>(&mValue), cmp_val, new_val, reinterpret_cast<u64*>(orig_val));
175}
176
177template <typename T>
178inline bool
180{
181 return OSTestAndSetAtomic64(reinterpret_cast<volatile OSAtomicVar64*>(&mValue), bitnum);
182}
183
184template <typename T>
185inline bool
187{
188 return OSTestAndClearAtomic64(reinterpret_cast<volatile OSAtomicVar64*>(&mValue), bitnum);
189}
190
191template <typename T>
192inline T
194{
195 // I hope this is correct
196 return *reinterpret_cast<const volatile T*>(&mValue);
197}
198
199template <typename T>
200inline void
202{
203 // I hope this is correct
204 *reinterpret_cast<volatile T*>(&mValue) = val;
205}
206
207template <typename T>
208inline T
210{
211 return (T)OSSwapAtomic(reinterpret_cast<volatile OSAtomicVar*>(&mValue), val);
212}
213
214template <typename T>
215inline bool
217{
218 return OSCompareAndSwapAtomic(reinterpret_cast<volatile OSAtomicVar*>(&mValue), (u32)cmp_val, (u32)new_val);
219}
220
221template <typename T>
222inline bool
227
228} // namespace sead
Definition seadAssert.h:44