aboutsummaryrefslogtreecommitdiff
path: root/std/atomic/int.zig
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2018-07-14 15:45:15 -0400
committerAndrew Kelley <superjoe30@gmail.com>2018-07-14 16:03:22 -0400
commit278829fc2cc23e55b09915ce07ce1ec2dbf7e68b (patch)
tree8c9b8a920ece20514e5457e266ed8fd1ac7310ba /std/atomic/int.zig
parent91636f1e8cc197a310205724458a4e1154530720 (diff)
downloadzig-278829fc2cc23e55b09915ce07ce1ec2dbf7e68b.tar.gz
zig-278829fc2cc23e55b09915ce07ce1ec2dbf7e68b.zip
self-hosted: adding a fn to an llvm module
Diffstat (limited to 'std/atomic/int.zig')
-rw-r--r--std/atomic/int.zig18
1 files changed, 14 insertions, 4 deletions
diff --git a/std/atomic/int.zig b/std/atomic/int.zig
index 7042bca78d..d51454c673 100644
--- a/std/atomic/int.zig
+++ b/std/atomic/int.zig
@@ -4,16 +4,26 @@ const AtomicOrder = builtin.AtomicOrder;
/// Thread-safe, lock-free integer
pub fn Int(comptime T: type) type {
return struct {
- value: T,
+ unprotected_value: T,
pub const Self = this;
pub fn init(init_val: T) Self {
- return Self{ .value = init_val };
+ return Self{ .unprotected_value = init_val };
}
- pub fn next(self: *Self) T {
- return @atomicRmw(T, &self.value, builtin.AtomicRmwOp.Add, 1, AtomicOrder.SeqCst);
+ /// Returns previous value
+ pub fn incr(self: *Self) T {
+ return @atomicRmw(T, &self.unprotected_value, builtin.AtomicRmwOp.Add, 1, AtomicOrder.SeqCst);
+ }
+
+ /// Returns previous value
+ pub fn decr(self: *Self) T {
+ return @atomicRmw(T, &self.unprotected_value, builtin.AtomicRmwOp.Sub, 1, AtomicOrder.SeqCst);
+ }
+
+ pub fn get(self: *Self) T {
+ return @atomicLoad(T, &self.unprotected_value, AtomicOrder.SeqCst);
}
};
}