diff options
Diffstat (limited to 'std/atomic')
| -rw-r--r-- | std/atomic/int.zig | 18 |
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); } }; } |
