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
5
namespace
sead
{
6
7
template
<
typename
T
>
8
inline
T
9
AtomicBase32
<
T
>::
getValue
()
const
10
{
11
// I hope this is correct
12
return
*
reinterpret_cast
<
const
volatile
T
*>(&
mValue
);
13
}
14
15
template
<
typename
T
>
16
inline
void
17
AtomicBase32
<
T
>::
setValue
(
T
val
)
18
{
19
// I hope this is correct
20
*
reinterpret_cast
<
volatile
T
*>(&
mValue
) =
val
;
21
}
22
23
template
<
typename
T
>
24
inline
T
25
AtomicBase32
<
T
>::
add
(
s32
val
)
26
{
27
return
OSAddAtomic
(
reinterpret_cast
<
volatile
OSAtomicVar
*>(&
mValue
),
val
);
28
}
29
30
template
<
typename
T
>
31
inline
T
32
AtomicBase32
<
T
>::
increment
()
33
{
34
return
OSIncAtomic
(
reinterpret_cast
<
volatile
OSAtomicVar
*>(&
mValue
));
35
}
36
37
template
<
typename
T
>
38
inline
T
39
AtomicBase32
<
T
>::
decrement
()
40
{
41
return
OSDecAtomic
(
reinterpret_cast
<
volatile
OSAtomicVar
*>(&
mValue
));
42
}
43
44
template
<
typename
T
>
45
inline
T
46
AtomicBase32
<
T
>::
orMask
(
T
mask
)
47
{
48
return
OSOrAtomic
(
reinterpret_cast
<
volatile
OSAtomicVar
*>(&
mValue
),
mask
);
49
}
50
51
template
<
typename
T
>
52
inline
T
53
AtomicBase32
<
T
>::
andMask
(
T
mask
)
54
{
55
return
OSAndAtomic
(
reinterpret_cast
<
volatile
OSAtomicVar
*>(&
mValue
),
mask
);
56
}
57
58
template
<
typename
T
>
59
inline
T
60
AtomicBase32
<
T
>::
xorMask
(
T
mask
)
61
{
62
return
OSXorAtomic
(
reinterpret_cast
<
volatile
OSAtomicVar
*>(&
mValue
),
mask
);
63
}
64
65
template
<
typename
T
>
66
inline
T
67
AtomicBase32
<
T
>::
swap
(
T
val
)
68
{
69
return
OSSwapAtomic
(
reinterpret_cast
<
volatile
OSAtomicVar
*>(&
mValue
),
val
);
70
}
71
72
template
<
typename
T
>
73
inline
bool
74
AtomicBase32
<
T
>::
compareAndSwap
(
T
cmp_val
,
T
new_val
)
75
{
76
return
OSCompareAndSwapAtomic
(
reinterpret_cast
<
volatile
OSAtomicVar
*>(&
mValue
),
cmp_val
,
new_val
);
77
}
78
79
template
<
typename
T
>
80
inline
bool
81
AtomicBase32
<
T
>::
compareAndSwapAndGetOriginal
(
T
cmp_val
,
T
new_val
,
T
*
orig_val
)
82
{
83
return
OSCompareAndSwapAtomicEx
(
reinterpret_cast
<
volatile
OSAtomicVar
*>(&
mValue
),
cmp_val
,
new_val
,
reinterpret_cast
<
u32
*>(
orig_val
));
84
}
85
86
template
<
typename
T
>
87
inline
bool
88
AtomicBase32
<
T
>::
setBitOn
(
T
bitnum
)
89
{
90
return
OSTestAndSetAtomic
(
reinterpret_cast
<
volatile
OSAtomicVar
*>(&
mValue
),
bitnum
);
91
}
92
93
template
<
typename
T
>
94
inline
bool
95
AtomicBase32
<
T
>::
setBitOff
(
T
bitnum
)
96
{
97
return
OSTestAndClearAtomic
(
reinterpret_cast
<
volatile
OSAtomicVar
*>(&
mValue
),
bitnum
);
98
}
99
100
template
<
typename
T
>
101
inline
T
102
AtomicBase64
<
T
>::
getValue
()
const
103
{
104
return
OSGetAtomic64
(
reinterpret_cast
<
volatile
OSAtomicVar64
*>(&
mValue
));
105
}
106
107
template
<
typename
T
>
108
inline
void
109
AtomicBase64
<
T
>::
setValue
(
T
val
)
110
{
111
OSSetAtomic64
(
reinterpret_cast
<
volatile
OSAtomicVar64
*>(&
mValue
),
val
);
112
}
113
114
template
<
typename
T
>
115
inline
T
116
AtomicBase64
<
T
>::
add
(
s64
val
)
117
{
118
return
OSAddAtomic64
(
reinterpret_cast
<
volatile
OSAtomicVar64
*>(&
mValue
),
val
);
119
}
120
121
template
<
typename
T
>
122
inline
T
123
AtomicBase64
<
T
>::
increment
()
124
{
125
return
OSIncAtomic64
(
reinterpret_cast
<
volatile
OSAtomicVar64
*>(&
mValue
));
126
}
127
128
template
<
typename
T
>
129
inline
T
130
AtomicBase64
<
T
>::
decrement
()
131
{
132
return
OSDecAtomic64
(
reinterpret_cast
<
volatile
OSAtomicVar64
*>(&
mValue
));
133
}
134
135
template
<
typename
T
>
136
inline
T
137
AtomicBase64
<
T
>::
orMask
(
T
mask
)
138
{
139
return
OSOrAtomic64
(
reinterpret_cast
<
volatile
OSAtomicVar64
*>(&
mValue
),
mask
);
140
}
141
142
template
<
typename
T
>
143
inline
T
144
AtomicBase64
<
T
>::
andMask
(
T
mask
)
145
{
146
return
OSAndAtomic64
(
reinterpret_cast
<
volatile
OSAtomicVar64
*>(&
mValue
),
mask
);
147
}
148
149
template
<
typename
T
>
150
inline
T
151
AtomicBase64
<
T
>::
xorMask
(
T
mask
)
152
{
153
return
OSXorAtomic64
(
reinterpret_cast
<
volatile
OSAtomicVar64
*>(&
mValue
),
mask
);
154
}
155
156
template
<
typename
T
>
157
inline
T
158
AtomicBase64
<
T
>::
swap
(
T
val
)
159
{
160
return
OSSwapAtomic64
(
reinterpret_cast
<
volatile
OSAtomicVar64
*>(&
mValue
),
val
);
161
}
162
163
template
<
typename
T
>
164
inline
bool
165
AtomicBase64
<
T
>::
compareAndSwap
(
T
cmp_val
,
T
new_val
)
166
{
167
return
OSCompareAndSwapAtomic64
(
reinterpret_cast
<
volatile
OSAtomicVar64
*>(&
mValue
),
cmp_val
,
new_val
);
168
}
169
170
template
<
typename
T
>
171
inline
bool
172
AtomicBase64
<
T
>::
compareAndSwapAndGetOriginal
(
T
cmp_val
,
T
new_val
,
T
*
orig_val
)
173
{
174
return
OSCompareAndSwapAtomicEx64
(
reinterpret_cast
<
volatile
OSAtomicVar64
*>(&
mValue
),
cmp_val
,
new_val
,
reinterpret_cast
<
u64
*>(
orig_val
));
175
}
176
177
template
<
typename
T
>
178
inline
bool
179
AtomicBase64
<
T
>::
setBitOn
(
u32
bitnum
)
180
{
181
return
OSTestAndSetAtomic64
(
reinterpret_cast
<
volatile
OSAtomicVar64
*>(&
mValue
),
bitnum
);
182
}
183
184
template
<
typename
T
>
185
inline
bool
186
AtomicBase64
<
T
>::
setBitOff
(
u32
bitnum
)
187
{
188
return
OSTestAndClearAtomic64
(
reinterpret_cast
<
volatile
OSAtomicVar64
*>(&
mValue
),
bitnum
);
189
}
190
191
template
<
typename
T
>
192
inline
T
193
AtomicPtr
<
T
>::
getValue
()
const
194
{
195
// I hope this is correct
196
return
*
reinterpret_cast
<
const
volatile
T
*>(&
mValue
);
197
}
198
199
template
<
typename
T
>
200
inline
void
201
AtomicPtr
<
T
>::
setValue
(
T
val
)
202
{
203
// I hope this is correct
204
*
reinterpret_cast
<
volatile
T
*>(&
mValue
) =
val
;
205
}
206
207
template
<
typename
T
>
208
inline
T
209
AtomicPtr
<
T
>::
swap
(
T
val
)
210
{
211
return
(
T
)
OSSwapAtomic
(
reinterpret_cast
<
volatile
OSAtomicVar
*>(&
mValue
),
val
);
212
}
213
214
template
<
typename
T
>
215
inline
bool
216
AtomicPtr
<
T
>::
compareAndSwap
(
T
cmp_val
,
T
new_val
)
217
{
218
return
OSCompareAndSwapAtomic
(
reinterpret_cast
<
volatile
OSAtomicVar
*>(&
mValue
), (
u32
)
cmp_val
, (
u32
)
new_val
);
219
}
220
221
template
<
typename
T
>
222
inline
bool
223
AtomicPtr
<
T
>::
compareAndSwapAndGetOriginal
(
T
cmp_val
,
T
new_val
,
T
*
orig_val
)
224
{
225
return
OSCompareAndSwapAtomicEx
(
reinterpret_cast
<
volatile
OSAtomicVar
*>(&
mValue
), (
u32
)
cmp_val
, (
u32
)
new_val
, (
u32
*)
orig_val
);
226
}
227
228
}
// namespace sead
sead
Definition
seadAssert.h:44
engine
library
include
thread
cafe
seadAtomicCafe.hpp
Generated by
1.14.0