8#ifndef INCLUDED_BSLS_ATOMICOPERATIONS
9#define INCLUDED_BSLS_ATOMICOPERATIONS
742#include <bsls_platform.h>
745#if defined(BSLS_PLATFORM_CMP_CLANG)
746#if __has_extension(c_atomic) || __has_extension(cxx_atomic)
747#define BSLS_ATOMICOPERATIONS_CLANG_ATOMICS
751#if defined(BSLS_ATOMICOPERATIONS_CLANG_ATOMICS)
755#elif defined(BSLS_PLATFORM_CMP_GNU) && BSLS_PLATFORM_CMP_VERSION >= 40700
759#elif defined(BSLS_PLATFORM_CPU_X86)
761# if defined(BSLS_PLATFORM_CMP_GNU) || defined(BSLS_PLATFORM_CMP_CLANG)
763# elif defined(BSLS_PLATFORM_CMP_MSVC)
766# define BSLS_ATOMICOPERATIONS_ERROR
769#elif defined(BSLS_PLATFORM_CPU_X86_64)
771# if defined(BSLS_PLATFORM_CMP_GNU) || defined(BSLS_PLATFORM_CMP_CLANG)
773# elif defined(BSLS_PLATFORM_CMP_MSVC)
776# define BSLS_ATOMICOPERATIONS_ERROR
779#elif defined(BSLS_PLATFORM_CPU_POWERPC)
781# if defined(BSLS_PLATFORM_CMP_IBM)
782# if defined(BSLS_PLATFORM_CPU_64_BIT)
787# elif defined(BSLS_PLATFORM_CMP_GNU)
790# define BSLS_ATOMICOPERATIONS_ERROR
793#elif defined(BSLS_PLATFORM_CPU_SPARC_32) \
794 && (defined(BSLS_PLATFORM_CMP_GNU) || defined(BSLS_PLATFORM_CMP_SUN))
797#elif defined(BSLS_PLATFORM_CPU_SPARC_V9) \
798 && (defined(BSLS_PLATFORM_CMP_GNU) || defined(BSLS_PLATFORM_CMP_SUN))
801#elif defined(BSLS_PLATFORM_CPU_ARM)
802# if defined(BSLS_PLATFORM_CMP_GNU) || defined(BSLS_PLATFORM_CMP_CLANG)
804# elif defined(BSLS_PLATFORM_CMP_MSVC)
805# if defined(BSLS_PLATFORM_CPU_64_BIT)
811# define BSLS_ATOMICOPERATIONS_ERROR
815# define BSLS_ATOMICOPERATIONS_ERROR
818#if defined(BSLS_ATOMICOPERATIONS_ERROR)
819# error "no implementation of atomics found for this platform"
839 typedef AtomicOperations_Imp
Imp;
848 static int getInt(AtomicTypes::Int
const *atomicInt);
860 static void initInt(AtomicTypes::Int *atomicInt,
int initialValue = 0);
865 static void setInt(AtomicTypes::Int *atomicInt,
int value);
869 static void setIntRelaxed(AtomicTypes::Int *atomicInt,
int value);
873 static void setIntRelease(AtomicTypes::Int *atomicInt,
int value);
878 static int swapInt(AtomicTypes::Int *atomicInt,
int swapValue);
883 static int swapIntAcqRel(AtomicTypes::Int *atomicInt,
int swapValue);
905 static void addInt(AtomicTypes::Int *atomicInt,
int value);
909 static void addIntAcqRel(AtomicTypes::Int *atomicInt,
int value);
913 static void addIntRelaxed(AtomicTypes::Int *atomicInt,
int value);
918 static int addIntNv(AtomicTypes::Int *atomicInt,
int value);
923 static int addIntNvAcqRel(AtomicTypes::Int *atomicInt,
int value);
969 static int subtractIntNv(AtomicTypes::Int *atomicInt,
int value);
997 static void initInt64(AtomicTypes::Int64 *atomicInt,
1003 static void setInt64(AtomicTypes::Int64 *atomicInt,
1043 AtomicTypes::Int64 *atomicInt,
1049 static void addInt64(AtomicTypes::Int64 *atomicInt,
1140 static unsigned int getUint(AtomicTypes::Uint
const *atomicUint);
1144 static unsigned int getUintAcquire(AtomicTypes::Uint
const *atomicUint);
1148 static unsigned int getUintRelaxed(AtomicTypes::Uint
const *atomicUint);
1152 static void initUint(AtomicTypes::Uint *atomicUint,
1153 unsigned int initialValue = 0);
1158 static void setUint(AtomicTypes::Uint *atomicUint,
unsigned int value);
1163 unsigned int value);
1168 unsigned int value);
1173 static unsigned int swapUint(AtomicTypes::Uint *atomicUint,
1174 unsigned int swapValue);
1179 static unsigned int swapUintAcqRel(AtomicTypes::Uint *atomicUint,
1180 unsigned int swapValue);
1189 unsigned int compareValue,
1190 unsigned int swapValue);
1198 unsigned int compareValue,
1199 unsigned int swapValue);
1203 static void addUint(AtomicTypes::Uint *atomicUint,
unsigned int value);
1208 unsigned int value);
1213 unsigned int value);
1218 static unsigned int addUintNv(AtomicTypes::Uint *atomicUint,
1219 unsigned int value);
1225 unsigned int value);
1231 unsigned int value);
1272 static unsigned int subtractUintNv(AtomicTypes::Uint *atomicUint,
1273 unsigned int value);
1279 unsigned int value);
1285 unsigned int value);
1296 AtomicTypes::Uint64
const *atomicUint);
1301 AtomicTypes::Uint64
const *atomicUint);
1305 static void initUint64(AtomicTypes::Uint64 *atomicUint,
1311 static void setUint64(AtomicTypes::Uint64 *atomicUint,
1352 AtomicTypes::Uint64 *atomicUint,
1358 static void addUint64(AtomicTypes::Uint64 *atomicUint,
1406 AtomicTypes::Uint64 *atomicUint);
1425 AtomicTypes::Uint64 *atomicUint);
1437 AtomicTypes::Uint64 *atomicUint,
1444 AtomicTypes::Uint64 *atomicUint,
1451 static void *
getPtr(AtomicTypes::Pointer
const *atomicPtr);
1455 static void *
getPtrAcquire(AtomicTypes::Pointer
const *atomicPtr);
1459 static void *
getPtrRelaxed(AtomicTypes::Pointer
const *atomicPtr);
1463 static void initPointer(AtomicTypes::Pointer *atomicPtr,
1464 void *initialValue = 0);
1469 static void setPtr(AtomicTypes::Pointer *atomicPtr,
1485 static void *
swapPtr(AtomicTypes::Pointer *atomicPtr,
1526 return Imp::getInt(atomicInt);
1532 return Imp::getIntAcquire(atomicInt);
1538 return Imp::getIntRelaxed(atomicInt);
1544 Imp::initInt(atomicInt, initialValue);
1550 Imp::setInt(atomicInt, value);
1556 Imp::setIntRelaxed(atomicInt, value);
1562 Imp::setIntRelease(atomicInt, value);
1568 return Imp::swapInt(atomicInt, swapValue);
1574 return Imp::swapIntAcqRel(atomicInt, swapValue);
1582 return Imp::testAndSwapInt(atomicInt, compareValue, swapValue);
1590 return Imp::testAndSwapIntAcqRel(atomicInt, compareValue, swapValue);
1598 Imp::addInt(atomicInt, value);
1604 Imp::addIntAcqRel(atomicInt, value);
1610 Imp::addIntRelaxed(atomicInt, value);
1616 return Imp::addIntNv(atomicInt, value);
1622 return Imp::addIntNvAcqRel(atomicInt, value);
1628 return Imp::addIntNvRelaxed(atomicInt, value);
1634 Imp::decrementInt(atomicInt);
1640 Imp::decrementIntAcqRel(atomicInt);
1646 return Imp::decrementIntNv(atomicInt);
1652 return Imp::decrementIntNvAcqRel(atomicInt);
1658 Imp::incrementInt(atomicInt);
1664 Imp::incrementIntAcqRel(atomicInt);
1670 return Imp::incrementIntNv(atomicInt);
1676 return Imp::incrementIntNvAcqRel(atomicInt);
1682 return Imp::subtractIntNv(atomicInt, value);
1689 return Imp::subtractIntNvAcqRel(atomicInt, value);
1696 return Imp::subtractIntNvRelaxed(atomicInt, value);
1705 return Imp::getInt64(atomicInt);
1712 return Imp::getInt64Acquire(atomicInt);
1719 return Imp::getInt64Relaxed(atomicInt);
1726 Imp::initInt64(atomicInt, initialValue);
1733 Imp::setInt64(atomicInt, value);
1740 Imp::setInt64Relaxed(atomicInt, value);
1747 Imp::setInt64Release(atomicInt, value);
1754 return Imp::swapInt64(atomicInt, swapValue);
1761 return Imp::swapInt64AcqRel(atomicInt, swapValue);
1766 AtomicTypes::Int64 *atomicInt,
1770 return Imp::testAndSwapInt64(atomicInt, compareValue, swapValue);
1775 AtomicTypes::Int64 *atomicInt,
1779 return Imp::testAndSwapInt64AcqRel(atomicInt, compareValue, swapValue);
1788 Imp::addInt64(atomicInt, value);
1795 Imp::addInt64AcqRel(atomicInt, value);
1802 Imp::addInt64Relaxed(atomicInt, value);
1809 return Imp::addInt64Nv(atomicInt, value);
1816 return Imp::addInt64NvAcqRel(atomicInt, value);
1823 return Imp::addInt64NvRelaxed(atomicInt, value);
1829 Imp::decrementInt64(atomicInt);
1835 Imp::decrementInt64AcqRel(atomicInt);
1842 return Imp::decrementInt64Nv(atomicInt);
1849 return Imp::decrementInt64NvAcqRel(atomicInt);
1855 Imp::incrementInt64(atomicInt);
1861 Imp::incrementInt64AcqRel(atomicInt);
1868 return Imp::incrementInt64Nv(atomicInt);
1875 return Imp::incrementInt64NvAcqRel(atomicInt);
1882 return Imp::subtractInt64Nv(atomicInt, value);
1887 AtomicTypes::Int64 *atomicInt,
1890 return Imp::subtractInt64NvAcqRel(atomicInt, value);
1895 AtomicTypes::Int64 *atomicInt,
1898 return Imp::subtractInt64NvRelaxed(atomicInt, value);
1906 return Imp::getUint(atomicUint);
1911 AtomicTypes::Uint
const *atomicUint)
1913 return Imp::getUintAcquire(atomicUint);
1918 AtomicTypes::Uint
const *atomicUint)
1920 return Imp::getUintRelaxed(atomicUint);
1925 unsigned int initialValue)
1927 Imp::initUint(atomicUint, initialValue);
1934 Imp::setUint(atomicUint, value);
1941 Imp::setUintRelaxed(atomicUint, value);
1948 Imp::setUintRelease(atomicUint, value);
1953 unsigned int swapValue)
1955 return Imp::swapUint(atomicUint, swapValue);
1960 unsigned int swapValue)
1962 return Imp::swapUintAcqRel(atomicUint, swapValue);
1967 unsigned int compareValue,
1968 unsigned int swapValue)
1970 return Imp::testAndSwapUint(atomicUint, compareValue, swapValue);
1975 AtomicTypes::Uint *atomicUint,
1976 unsigned int compareValue,
1977 unsigned int swapValue)
1979 return Imp::testAndSwapUintAcqRel(atomicUint, compareValue, swapValue);
1988 Imp::addUint(atomicUint, value);
1995 Imp::addUintAcqRel(atomicUint, value);
2002 Imp::addUintRelaxed(atomicUint, value);
2009 return Imp::addUintNv(atomicUint, value);
2016 return Imp::addUintNvAcqRel(atomicUint, value);
2023 return Imp::addUintNvRelaxed(atomicUint, value);
2029 Imp::decrementUint(atomicUint);
2035 Imp::decrementUintAcqRel(atomicUint);
2041 return Imp::decrementUintNv(atomicUint);
2046 AtomicTypes::Uint *atomicUint)
2048 return Imp::decrementUintNvAcqRel(atomicUint);
2054 Imp::incrementUint(atomicUint);
2060 Imp::incrementUintAcqRel(atomicUint);
2066 return Imp::incrementUintNv(atomicUint);
2071 AtomicTypes::Uint *atomicUint)
2073 return Imp::incrementUintNvAcqRel(atomicUint);
2080 return Imp::subtractUintNv(atomicUint, value);
2085 AtomicTypes::Uint *atomicUint,
2088 return Imp::subtractUintNvAcqRel(atomicUint, value);
2093 AtomicTypes::Uint *atomicUint,
2096 return Imp::subtractUintNvRelaxed(atomicUint, value);
2105 return Imp::getUint64(atomicUint);
2112 return Imp::getUint64Acquire(atomicUint);
2119 return Imp::getUint64Relaxed(atomicUint);
2126 Imp::initUint64(atomicUint, initialValue);
2133 Imp::setUint64(atomicUint, value);
2140 Imp::setUint64Relaxed(atomicUint, value);
2147 Imp::setUint64Release(atomicUint, value);
2154 return Imp::swapUint64(atomicUint, swapValue);
2159 AtomicTypes::Uint64 *atomicUint,
2162 return Imp::swapUint64AcqRel(atomicUint, swapValue);
2167 AtomicTypes::Uint64 *atomicUint,
2171 return Imp::testAndSwapUint64(atomicUint, compareValue, swapValue);
2176 AtomicTypes::Uint64 *atomicUint,
2180 return Imp::testAndSwapUint64AcqRel(atomicUint, compareValue, swapValue);
2189 Imp::addUint64(atomicUint, value);
2196 Imp::addUint64AcqRel(atomicUint, value);
2203 Imp::addUint64Relaxed(atomicUint, value);
2210 return Imp::addUint64Nv(atomicUint, value);
2215 AtomicTypes::Uint64 *atomicUint,
2218 return Imp::addUint64NvAcqRel(atomicUint, value);
2223 AtomicTypes::Uint64 *atomicUint,
2226 return Imp::addUint64NvRelaxed(atomicUint, value);
2232 Imp::decrementUint64(atomicUint);
2238 Imp::decrementUint64AcqRel(atomicUint);
2245 return Imp::decrementUint64Nv(atomicUint);
2252 return Imp::decrementUint64NvAcqRel(atomicUint);
2258 Imp::incrementUint64(atomicUint);
2264 Imp::incrementUint64AcqRel(atomicUint);
2271 return Imp::incrementUint64Nv(atomicUint);
2278 return Imp::incrementUint64NvAcqRel(atomicUint);
2283 AtomicTypes::Uint64 *atomicUint,
2286 return Imp::subtractUint64Nv(atomicUint, value);
2291 AtomicTypes::Uint64 *atomicUint,
2294 return Imp::subtractUint64NvAcqRel(atomicUint, value);
2299 AtomicTypes::Uint64 *atomicUint,
2302 return Imp::subtractUint64NvRelaxed(atomicUint, value);
2310 return Imp::getPtr(atomicPtr);
2316 return Imp::getPtrAcquire(atomicPtr);
2322 return Imp::getPtrRelaxed(atomicPtr);
2329 Imp::initPointer(atomicPtr, initialValue);
2336 Imp::setPtr(atomicPtr, value);
2343 Imp::setPtrRelaxed(atomicPtr, value);
2350 Imp::setPtrRelease(atomicPtr, value);
2357 return Imp::swapPtr(atomicPtr, swapValue);
2364 return Imp::swapPtrAcqRel(atomicPtr, swapValue);
2372 return Imp::testAndSwapPtr(atomicPtr, compareValue, swapValue);
2377 AtomicTypes::Pointer *atomicPtr,
2381 return Imp::testAndSwapPtrAcqRel(atomicPtr, compareValue, swapValue);
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
Definition bdlt_iso8601util.h:707
Definition bsls_atomicoperations.h:836
static void setInt(AtomicTypes::Int *atomicInt, int value)
Definition bsls_atomicoperations.h:1548
static void incrementInt64AcqRel(AtomicTypes::Int64 *atomicInt)
Definition bsls_atomicoperations.h:1859
static Types::Uint64 getUint64Relaxed(AtomicTypes::Uint64 const *atomicUint)
Definition bsls_atomicoperations.h:2117
static void decrementUint(AtomicTypes::Uint *atomicUint)
Definition bsls_atomicoperations.h:2027
static unsigned int swapUintAcqRel(AtomicTypes::Uint *atomicUint, unsigned int swapValue)
Definition bsls_atomicoperations.h:1959
static int subtractIntNvRelaxed(AtomicTypes::Int *atomicInt, int value)
Definition bsls_atomicoperations.h:1693
static void * swapPtrAcqRel(AtomicTypes::Pointer *atomicPtr, void *swapValue)
Definition bsls_atomicoperations.h:2361
static int getIntAcquire(AtomicTypes::Int const *atomicInt)
Definition bsls_atomicoperations.h:1530
static Types::Int64 swapInt64(AtomicTypes::Int64 *atomicInt, Types::Int64 swapValue)
Definition bsls_atomicoperations.h:1751
static void * getPtr(AtomicTypes::Pointer const *atomicPtr)
Definition bsls_atomicoperations.h:2308
static void setPtrRelaxed(AtomicTypes::Pointer *atomicPtr, void *value)
Definition bsls_atomicoperations.h:2340
static int incrementIntNvAcqRel(AtomicTypes::Int *atomicInt)
Definition bsls_atomicoperations.h:1674
static void addUint64Relaxed(AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations.h:2200
static void setPtr(AtomicTypes::Pointer *atomicPtr, void *value)
Definition bsls_atomicoperations.h:2333
static unsigned int getUintAcquire(AtomicTypes::Uint const *atomicUint)
Definition bsls_atomicoperations.h:1910
static void setUint64Relaxed(AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations.h:2137
static unsigned int decrementUintNv(AtomicTypes::Uint *atomicUint)
Definition bsls_atomicoperations.h:2039
static unsigned int getUintRelaxed(AtomicTypes::Uint const *atomicUint)
Definition bsls_atomicoperations.h:1917
static void addUint(AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations.h:1985
static Types::Uint64 addUint64Nv(AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations.h:2207
static int addIntNvRelaxed(AtomicTypes::Int *atomicInt, int value)
Definition bsls_atomicoperations.h:1626
AtomicOperations_Imp Imp
Definition bsls_atomicoperations.h:839
static void setInt64Release(AtomicTypes::Int64 *atomicInt, Types::Int64 value)
Definition bsls_atomicoperations.h:1744
static unsigned int testAndSwapUint(AtomicTypes::Uint *atomicUint, unsigned int compareValue, unsigned int swapValue)
Definition bsls_atomicoperations.h:1966
static void setUint64(AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations.h:2130
static void setIntRelease(AtomicTypes::Int *atomicInt, int value)
Definition bsls_atomicoperations.h:1560
static Types::Uint64 incrementUint64Nv(AtomicTypes::Uint64 *atomicUint)
Definition bsls_atomicoperations.h:2269
static void initPointer(AtomicTypes::Pointer *atomicPtr, void *initialValue=0)
Definition bsls_atomicoperations.h:2326
static void initInt64(AtomicTypes::Int64 *atomicInt, Types::Int64 initialValue=0)
Definition bsls_atomicoperations.h:1723
static unsigned int addUintNvRelaxed(AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations.h:2020
static int decrementIntNvAcqRel(AtomicTypes::Int *atomicInt)
Definition bsls_atomicoperations.h:1650
static void decrementUintAcqRel(AtomicTypes::Uint *atomicUint)
Definition bsls_atomicoperations.h:2033
static void setUintRelaxed(AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations.h:1938
static Types::Int64 testAndSwapInt64AcqRel(AtomicTypes::Int64 *atomicInt, Types::Int64 compareValue, Types::Int64 swapValue)
Definition bsls_atomicoperations.h:1774
static void setInt64Relaxed(AtomicTypes::Int64 *atomicInt, Types::Int64 value)
Definition bsls_atomicoperations.h:1737
static Types::Int64 subtractInt64Nv(AtomicTypes::Int64 *atomicInt, Types::Int64 value)
Definition bsls_atomicoperations.h:1879
static Types::Uint64 testAndSwapUint64(AtomicTypes::Uint64 *atomicUint, Types::Uint64 compareValue, Types::Uint64 swapValue)
Definition bsls_atomicoperations.h:2166
static void setUintRelease(AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations.h:1945
static Types::Uint64 addUint64NvRelaxed(AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations.h:2222
static void incrementUint64(AtomicTypes::Uint64 *atomicUint)
Definition bsls_atomicoperations.h:2256
static unsigned int subtractUintNvRelaxed(AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations.h:2092
static Types::Int64 getInt64(AtomicTypes::Int64 const *atomicInt)
Definition bsls_atomicoperations.h:1703
static Types::Int64 addInt64NvAcqRel(AtomicTypes::Int64 *atomicInt, Types::Int64 value)
Definition bsls_atomicoperations.h:1813
static Types::Int64 incrementInt64Nv(AtomicTypes::Int64 *atomicInt)
Definition bsls_atomicoperations.h:1866
static void decrementInt64(AtomicTypes::Int64 *atomicInt)
Definition bsls_atomicoperations.h:1827
static void setInt64(AtomicTypes::Int64 *atomicInt, Types::Int64 value)
Definition bsls_atomicoperations.h:1730
static void * getPtrAcquire(AtomicTypes::Pointer const *atomicPtr)
Definition bsls_atomicoperations.h:2314
static unsigned int swapUint(AtomicTypes::Uint *atomicUint, unsigned int swapValue)
Definition bsls_atomicoperations.h:1952
static void setUint(AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations.h:1931
static unsigned int addUintNv(AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations.h:2006
static void * testAndSwapPtrAcqRel(AtomicTypes::Pointer *atomicPtr, void *compareValue, void *swapValue)
Definition bsls_atomicoperations.h:2376
static void setIntRelaxed(AtomicTypes::Int *atomicInt, int value)
Definition bsls_atomicoperations.h:1554
static Types::Uint64 testAndSwapUint64AcqRel(AtomicTypes::Uint64 *atomicUint, Types::Uint64 compareValue, Types::Uint64 swapValue)
Definition bsls_atomicoperations.h:2175
static unsigned int testAndSwapUintAcqRel(AtomicTypes::Uint *atomicUint, unsigned int compareValue, unsigned int swapValue)
Definition bsls_atomicoperations.h:1974
Atomic_TypeTraits< Imp > AtomicTypes
Definition bsls_atomicoperations.h:840
static unsigned int getUint(AtomicTypes::Uint const *atomicUint)
Definition bsls_atomicoperations.h:1904
static void addIntAcqRel(AtomicTypes::Int *atomicInt, int value)
Definition bsls_atomicoperations.h:1602
static unsigned int subtractUintNvAcqRel(AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations.h:2084
static int incrementIntNv(AtomicTypes::Int *atomicInt)
Definition bsls_atomicoperations.h:1668
static Types::Uint64 swapUint64(AtomicTypes::Uint64 *atomicUint, Types::Uint64 swapValue)
Definition bsls_atomicoperations.h:2151
static int getIntRelaxed(AtomicTypes::Int const *atomicInt)
Definition bsls_atomicoperations.h:1536
static int getInt(AtomicTypes::Int const *atomicInt)
Definition bsls_atomicoperations.h:1524
static Types::Int64 subtractInt64NvRelaxed(AtomicTypes::Int64 *atomicInt, Types::Int64 value)
Definition bsls_atomicoperations.h:1894
static void * testAndSwapPtr(AtomicTypes::Pointer *atomicPtr, void *compareValue, void *swapValue)
Definition bsls_atomicoperations.h:2368
static void decrementUint64(AtomicTypes::Uint64 *atomicUint)
Definition bsls_atomicoperations.h:2230
static void decrementInt64AcqRel(AtomicTypes::Int64 *atomicInt)
Definition bsls_atomicoperations.h:1833
static void setPtrRelease(AtomicTypes::Pointer *atomicPtr, void *value)
Definition bsls_atomicoperations.h:2347
static void addIntRelaxed(AtomicTypes::Int *atomicInt, int value)
Definition bsls_atomicoperations.h:1608
static void initInt(AtomicTypes::Int *atomicInt, int initialValue=0)
Definition bsls_atomicoperations.h:1542
static int testAndSwapIntAcqRel(AtomicTypes::Int *atomicInt, int compareValue, int swapValue)
Definition bsls_atomicoperations.h:1586
static void addInt64AcqRel(AtomicTypes::Int64 *atomicInt, Types::Int64 value)
Definition bsls_atomicoperations.h:1792
static int subtractIntNv(AtomicTypes::Int *atomicInt, int value)
Definition bsls_atomicoperations.h:1680
static void addUint64(AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations.h:2186
static Types::Uint64 swapUint64AcqRel(AtomicTypes::Uint64 *atomicUint, Types::Uint64 swapValue)
Definition bsls_atomicoperations.h:2158
static void addInt64Relaxed(AtomicTypes::Int64 *atomicInt, Types::Int64 value)
Definition bsls_atomicoperations.h:1799
static void incrementUint(AtomicTypes::Uint *atomicUint)
Definition bsls_atomicoperations.h:2052
static int addIntNv(AtomicTypes::Int *atomicInt, int value)
Definition bsls_atomicoperations.h:1614
static void incrementInt64(AtomicTypes::Int64 *atomicInt)
Definition bsls_atomicoperations.h:1853
static Types::Uint64 addUint64NvAcqRel(AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations.h:2214
static Types::Int64 getInt64Acquire(AtomicTypes::Int64 const *atomicInt)
Definition bsls_atomicoperations.h:1710
static void incrementUintAcqRel(AtomicTypes::Uint *atomicUint)
Definition bsls_atomicoperations.h:2058
static Types::Int64 incrementInt64NvAcqRel(AtomicTypes::Int64 *atomicInt)
Definition bsls_atomicoperations.h:1873
static Types::Uint64 subtractUint64NvRelaxed(AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations.h:2298
static void incrementUint64AcqRel(AtomicTypes::Uint64 *atomicUint)
Definition bsls_atomicoperations.h:2262
static unsigned int decrementUintNvAcqRel(AtomicTypes::Uint *atomicUint)
Definition bsls_atomicoperations.h:2045
static Types::Int64 testAndSwapInt64(AtomicTypes::Int64 *atomicInt, Types::Int64 compareValue, Types::Int64 swapValue)
Definition bsls_atomicoperations.h:1765
static Types::Int64 decrementInt64NvAcqRel(AtomicTypes::Int64 *atomicInt)
Definition bsls_atomicoperations.h:1847
static void initUint64(AtomicTypes::Uint64 *atomicUint, Types::Uint64 initialValue=0)
Definition bsls_atomicoperations.h:2123
static void addUintRelaxed(AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations.h:1999
static unsigned int incrementUintNv(AtomicTypes::Uint *atomicUint)
Definition bsls_atomicoperations.h:2064
static Types::Int64 addInt64Nv(AtomicTypes::Int64 *atomicInt, Types::Int64 value)
Definition bsls_atomicoperations.h:1806
static void decrementUint64AcqRel(AtomicTypes::Uint64 *atomicUint)
Definition bsls_atomicoperations.h:2236
static void * swapPtr(AtomicTypes::Pointer *atomicPtr, void *swapValue)
Definition bsls_atomicoperations.h:2354
static void decrementInt(AtomicTypes::Int *atomicInt)
Definition bsls_atomicoperations.h:1632
static Types::Uint64 getUint64(AtomicTypes::Uint64 const *atomicUint)
Definition bsls_atomicoperations.h:2103
static void addUint64AcqRel(AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations.h:2193
static int swapIntAcqRel(AtomicTypes::Int *atomicInt, int swapValue)
Definition bsls_atomicoperations.h:1572
static int testAndSwapInt(AtomicTypes::Int *atomicInt, int compareValue, int swapValue)
Definition bsls_atomicoperations.h:1578
static int addIntNvAcqRel(AtomicTypes::Int *atomicInt, int value)
Definition bsls_atomicoperations.h:1620
static Types::Uint64 subtractUint64NvAcqRel(AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations.h:2290
static unsigned int subtractUintNv(AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations.h:2077
static unsigned int incrementUintNvAcqRel(AtomicTypes::Uint *atomicUint)
Definition bsls_atomicoperations.h:2070
static void incrementIntAcqRel(AtomicTypes::Int *atomicInt)
Definition bsls_atomicoperations.h:1662
static void addInt(AtomicTypes::Int *atomicInt, int value)
Definition bsls_atomicoperations.h:1596
static void addUintAcqRel(AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations.h:1992
static int swapInt(AtomicTypes::Int *atomicInt, int swapValue)
Definition bsls_atomicoperations.h:1566
static void addInt64(AtomicTypes::Int64 *atomicInt, Types::Int64 value)
Definition bsls_atomicoperations.h:1785
static Types::Int64 decrementInt64Nv(AtomicTypes::Int64 *atomicInt)
Definition bsls_atomicoperations.h:1840
static Types::Uint64 getUint64Acquire(AtomicTypes::Uint64 const *atomicUint)
Definition bsls_atomicoperations.h:2110
static Types::Int64 addInt64NvRelaxed(AtomicTypes::Int64 *atomicInt, Types::Int64 value)
Definition bsls_atomicoperations.h:1820
static unsigned int addUintNvAcqRel(AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations.h:2013
static Types::Int64 subtractInt64NvAcqRel(AtomicTypes::Int64 *atomicInt, Types::Int64 value)
Definition bsls_atomicoperations.h:1886
static int decrementIntNv(AtomicTypes::Int *atomicInt)
Definition bsls_atomicoperations.h:1644
static Types::Uint64 subtractUint64Nv(AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations.h:2282
static void initUint(AtomicTypes::Uint *atomicUint, unsigned int initialValue=0)
Definition bsls_atomicoperations.h:1924
static Types::Uint64 incrementUint64NvAcqRel(AtomicTypes::Uint64 *atomicUint)
Definition bsls_atomicoperations.h:2276
static Types::Int64 swapInt64AcqRel(AtomicTypes::Int64 *atomicInt, Types::Int64 swapValue)
Definition bsls_atomicoperations.h:1758
static void decrementIntAcqRel(AtomicTypes::Int *atomicInt)
Definition bsls_atomicoperations.h:1638
static void * getPtrRelaxed(AtomicTypes::Pointer const *atomicPtr)
Definition bsls_atomicoperations.h:2320
static void incrementInt(AtomicTypes::Int *atomicInt)
Definition bsls_atomicoperations.h:1656
static Types::Uint64 decrementUint64NvAcqRel(AtomicTypes::Uint64 *atomicUint)
Definition bsls_atomicoperations.h:2250
static void setUint64Release(AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations.h:2144
static int subtractIntNvAcqRel(AtomicTypes::Int *atomicInt, int value)
Definition bsls_atomicoperations.h:1686
static Types::Uint64 decrementUint64Nv(AtomicTypes::Uint64 *atomicUint)
Definition bsls_atomicoperations.h:2243
static Types::Int64 getInt64Relaxed(AtomicTypes::Int64 const *atomicInt)
Definition bsls_atomicoperations.h:1717
Definition bsls_atomicoperations_default.h:333
unsigned long long Uint64
Definition bsls_types.h:139
long long Int64
Definition bsls_types.h:134