3#include "util/Concepts.hpp"
13template <SomeNumberType NumberType>
16 using ValueType = NumberType;
35 operator=(
Atomic const&) =
delete;
37 operator=(
Atomic&&) =
delete;
47 if constexpr (std::is_integral_v<ValueType>) {
48 value_.fetch_add(
value);
50#if __cpp_lib_atomic_float >= 201711L
51 value_.fetch_add(
value);
56 auto current = value_.load();
57 while (!value_.compare_exchange_weak(current, current +
value)) {
79 [[nodiscard]] ValueType
86 std::atomic<ValueType> value_{0};
89template <SomeNumberType NumberType>
90using AtomicPtr = std::unique_ptr<Atomic<NumberType>>;
Atomic wrapper for integral and floating point types.
Definition Atomic.hpp:14
void set(ValueType const value)
Update the current value to the new value.
Definition Atomic.hpp:69
void add(ValueType const value)
Add a value to the current value.
Definition Atomic.hpp:45
ValueType value() const
Get the current value.
Definition Atomic.hpp:80
Atomic(ValueType const value)
Construct a new Atomic object.
Definition Atomic.hpp:25
This namespace contains various utilities.
Definition AccountUtils.hpp:11