Foundation
Loading...
Searching...
No Matches
Atomic.hpp
Go to the documentation of this file.
1#pragma once
2#include <atomic>
21namespace Foundation::Core
22{
26 template<typename T> using Atomic = std::atomic<T>;
27
28 template<typename T>
29 T InterlockedMin(Atomic<T>& atomic, T value, std::memory_order order = std::memory_order_seq_cst)
30 {
31 T previous = atomic.load(std::memory_order_relaxed);
32 while (value < previous && !atomic.compare_exchange_weak(previous, value, order, std::memory_order_relaxed))
33 {
34 }
35 return previous;
36 }
37
38 template<typename T>
39 T InterlockedMax(Atomic<T>& atomic, T value, std::memory_order order = std::memory_order_seq_cst)
40 {
41 T previous = atomic.load(std::memory_order_relaxed);
42 while (previous < value && !atomic.compare_exchange_weak(previous, value, order, std::memory_order_relaxed))
43 {
44 }
45 return previous;
46 }
47}
Lock-free atomic primitives and implementations of data structures.
Definition Allocator.hpp:5
T InterlockedMin(Atomic< T > &atomic, T value, std::memory_order order=std::memory_order_seq_cst)
Definition Atomic.hpp:29
std::atomic< T > Atomic
Alias of std::atomic<T>.
Definition Atomic.hpp:26
T InterlockedMax(Atomic< T > &atomic, T value, std::memory_order order=std::memory_order_seq_cst)
Definition Atomic.hpp:39
T * Construct(Allocator *resource, Args &&...args)
Convenience placement new with object of type T using a Foundation::Core::Allocator.
Definition Allocator.hpp:153