16namespace Experimental {
19template <
typename T,
typename...
Ts>
28template <std::
size_t N>
33 static void Load(
const void *ptr,
void *
ret)
37 static void Store(
void *ptr,
void *val)
41 static void Add(
void *ptr,
const void *val)
61 static void Load(
const void *ptr,
void *
ret)
65 static void Store(
void *ptr,
void *val)
69 static void Add(
void *ptr,
const void *val)
89 static void Load(
const void *ptr,
void *
ret)
93 static void Store(
void *ptr,
void *val)
97 static void Add(
void *ptr,
const void *val)
117 static void Load(
const void *ptr,
void *
ret)
121 static void Store(
void *ptr,
void *val)
125 static void Add(
void *ptr,
const void *val);
148 MSVC::AtomicOps<
sizeof(T)>::Load(ptr,
ret);
159 std::atomic_thread_fence(std::memory_order_release);
160 MSVC::AtomicOps<
sizeof(T)>::Store(ptr, val);
182 std::atomic_thread_fence(std::memory_order_acquire);
206 AtomicAddCompareExchangeLoop(
static_cast<__int64 *
>(ptr), *
static_cast<const __int64 *
>(val));
213std::enable_if_t<std::is_integral_v<T>>
AtomicAdd(T *ptr, T val)
218 MSVC::AtomicOps<
sizeof(T)>
::Add(ptr, &val);
223std::enable_if_t<std::is_floating_point_v<T>>
AtomicAdd(T *ptr, T val)
236std::enable_if_t<std::is_arithmetic_v<T>>
AtomicInc(T *ptr)
241template <
typename T,
typename U>
242auto AtomicAdd(T *ptr,
const U &add) ->
decltype(ptr->AtomicAdd(add))
244 return ptr->AtomicAdd(add);
250 return ptr->AtomicInc();
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
std::enable_if_t< std::is_arithmetic_v< T > > AtomicInc(T *ptr)
void AtomicLoad(const T *ptr, T *ret)
void AtomicStoreRelease(T *ptr, T *val)
bool AtomicCompareExchange(T *ptr, T *expected, T *desired)
bool AtomicCompareExchangeAcquire(T *ptr, T *expected, T *desired)
void AtomicAddCompareExchangeLoop(T *ptr, T val)
std::enable_if_t< std::is_integral_v< T > > AtomicAdd(T *ptr, T val)
TMatrixT< Element > & Add(TMatrixT< Element > &target, Element scalar, const TMatrixT< Element > &source)
Modify addition: target += scalar * source.