sead
Loading...
Searching...
No Matches
seadAtomic.h
Go to the documentation of this file.
1#ifndef SEAD_ATOMIC_H_
2#define SEAD_ATOMIC_H_
3
4#include <basis/seadTypes.h>
5
6namespace sead {
7
8template <typename T>
10{
11 static_assert(sizeof(T) == sizeof(u32));
12
13public:
15 : mValue()
16 {
17 }
18
20 : mValue(val)
21 {
22 }
23
24 T getValue() const;
25 void setValue(T val);
26
28 {
29 mValue = val;
30 }
31
32 T add(s32 val);
35
36 T orMask(T mask);
37 T andMask(T mask);
38 T xorMask(T mask);
39
40 T swap(T val);
41 bool compareAndSwap(T cmp_val, T new_val);
42 bool compareAndSwapAndGetOriginal(T cmp_val, T new_val, T* orig_val);
43
44 bool isBitOn(T bitnum) const
45 {
46 return getValue() & (1 << bitnum);
47 }
48
49 bool setBitOn(T bitnum);
50 bool setBitOff(T bitnum);
51
52protected:
54};
55
57
58template <typename T>
60{
61 static_assert(sizeof(T) == sizeof(u64));
62
63public:
65 : mValue()
66 {
67 }
68
70 : mValue(val)
71 {
72 }
73
74 T getValue() const;
75 void setValue(T val);
76
78 {
79 mValue = val;
80 }
81
82 T add(s64 val);
85
86 T orMask(T mask);
87 T andMask(T mask);
88 T xorMask(T mask);
89
90 T swap(T val);
91 bool compareAndSwap(T cmp_val, T new_val);
92 bool compareAndSwapAndGetOriginal(T cmp_val, T new_val, T* orig_val);
93
94 bool isBitOn(u32 bitnum) const
95 {
96 return getValue() & (1LL << bitnum);
97 }
98
99 bool setBitOn(u32 bitnum);
100 bool setBitOff(u32 bitnum);
101
102protected:
104};
105
107
108template <typename T>
110{
111 static_assert(sizeof(T) == sizeof(void*));
112
113public:
115 : mValue(nullptr)
116 {
117 }
118
120 : mValue(val)
121 {
122 }
123
124 T getValue() const;
125 void setValue(T val);
126
128 {
129 mValue = val;
130 }
131
132 T swap(T val);
133 bool compareAndSwap(T cmp_val, T new_val);
134 bool compareAndSwapAndGetOriginal(T cmp_val, T new_val, T* orig_val);
135
136protected:
138};
139
140} // namespace sead
141
142#ifdef __cplusplus
143
144#ifdef cafe
145#include <thread/cafe/seadAtomicCafe.hpp>
146#else
147#error "Unknown platform"
148#endif // cafe
149
150#endif // __cplusplus
151
152#endif // SEAD_ATOMIC_H_
Definition seadAtomic.h:10
T mValue
Definition seadAtomic.h:53
bool setBitOff(T bitnum)
Definition seadAtomicCafe.hpp:95
void setValue(T val)
Definition seadAtomicCafe.hpp:17
bool isBitOn(T bitnum) const
Definition seadAtomic.h:44
T decrement()
Definition seadAtomicCafe.hpp:39
bool compareAndSwapAndGetOriginal(T cmp_val, T new_val, T *orig_val)
Definition seadAtomicCafe.hpp:81
T orMask(T mask)
Definition seadAtomicCafe.hpp:46
T swap(T val)
Definition seadAtomicCafe.hpp:67
void setValueNonAtomic(T val)
Definition seadAtomic.h:27
T andMask(T mask)
Definition seadAtomicCafe.hpp:53
bool setBitOn(T bitnum)
Definition seadAtomicCafe.hpp:88
AtomicBase32(T val)
Definition seadAtomic.h:19
T add(s32 val)
Definition seadAtomicCafe.hpp:25
T increment()
Definition seadAtomicCafe.hpp:32
T getValue() const
Definition seadAtomicCafe.hpp:9
T xorMask(T mask)
Definition seadAtomicCafe.hpp:60
AtomicBase32()
Definition seadAtomic.h:14
bool compareAndSwap(T cmp_val, T new_val)
Definition seadAtomicCafe.hpp:74
Definition seadAtomic.h:60
T getValue() const
Definition seadAtomicCafe.hpp:102
T xorMask(T mask)
Definition seadAtomicCafe.hpp:151
T orMask(T mask)
Definition seadAtomicCafe.hpp:137
T andMask(T mask)
Definition seadAtomicCafe.hpp:144
T mValue
Definition seadAtomic.h:103
bool setBitOff(u32 bitnum)
Definition seadAtomicCafe.hpp:186
bool isBitOn(u32 bitnum) const
Definition seadAtomic.h:94
bool setBitOn(u32 bitnum)
Definition seadAtomicCafe.hpp:179
void setValueNonAtomic(T val)
Definition seadAtomic.h:77
AtomicBase64()
Definition seadAtomic.h:64
AtomicBase64(T val)
Definition seadAtomic.h:69
void setValue(T val)
Definition seadAtomicCafe.hpp:109
bool compareAndSwapAndGetOriginal(T cmp_val, T new_val, T *orig_val)
Definition seadAtomicCafe.hpp:172
T decrement()
Definition seadAtomicCafe.hpp:130
T swap(T val)
Definition seadAtomicCafe.hpp:158
T add(s64 val)
Definition seadAtomicCafe.hpp:116
bool compareAndSwap(T cmp_val, T new_val)
Definition seadAtomicCafe.hpp:165
T increment()
Definition seadAtomicCafe.hpp:123
Definition seadAtomic.h:110
void setValue(T val)
Definition seadAtomicCafe.hpp:201
bool compareAndSwap(T cmp_val, T new_val)
Definition seadAtomicCafe.hpp:216
T getValue() const
Definition seadAtomicCafe.hpp:193
AtomicPtr(T val)
Definition seadAtomic.h:119
bool compareAndSwapAndGetOriginal(T cmp_val, T new_val, T *orig_val)
Definition seadAtomicCafe.hpp:223
AtomicPtr()
Definition seadAtomic.h:114
T mValue
Definition seadAtomic.h:137
T swap(T val)
Definition seadAtomicCafe.hpp:209
void setValueNonAtomic(T val)
Definition seadAtomic.h:127
Definition seadAssert.h:44
AtomicBase64< u64 > AtomicU64
Definition seadAtomic.h:106
AtomicBase32< u32 > AtomicU32
Definition seadAtomic.h:56