Foundation
Loading...
Searching...
No Matches
Source
Core
Atomic.hpp
Go to the documentation of this file.
1
#pragma once
2
#include <atomic>
21
namespace
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
}
Foundation::Core
Lock-free atomic primitives and implementations of data structures.
Definition
Allocator.hpp:6
Foundation::Core::InterlockedMin
T InterlockedMin(Atomic< T > &atomic, T value, std::memory_order order=std::memory_order_seq_cst)
Definition
Atomic.hpp:29
Foundation::Core::Atomic
std::atomic< T > Atomic
Alias of std::atomic<T>.
Definition
Atomic.hpp:26
Foundation::Core::InterlockedMax
T InterlockedMax(Atomic< T > &atomic, T value, std::memory_order order=std::memory_order_seq_cst)
Definition
Atomic.hpp:39
Generated by
1.9.8