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"
837 typedef AtomicOperations_Imp
Imp;
846 static int getInt(AtomicTypes::Int
const *atomicInt);
858 static void initInt(AtomicTypes::Int *atomicInt,
int initialValue = 0);
863 static void setInt(AtomicTypes::Int *atomicInt,
int value);
867 static void setIntRelaxed(AtomicTypes::Int *atomicInt,
int value);
871 static void setIntRelease(AtomicTypes::Int *atomicInt,
int value);
876 static int swapInt(AtomicTypes::Int *atomicInt,
int swapValue);
881 static int swapIntAcqRel(AtomicTypes::Int *atomicInt,
int swapValue);
903 static void addInt(AtomicTypes::Int *atomicInt,
int value);
907 static void addIntAcqRel(AtomicTypes::Int *atomicInt,
int value);
911 static void addIntRelaxed(AtomicTypes::Int *atomicInt,
int value);
916 static int addIntNv(AtomicTypes::Int *atomicInt,
int value);
921 static int addIntNvAcqRel(AtomicTypes::Int *atomicInt,
int value);
967 static int subtractIntNv(AtomicTypes::Int *atomicInt,
int value);
995 static void initInt64(AtomicTypes::Int64 *atomicInt,
1001 static void setInt64(AtomicTypes::Int64 *atomicInt,
1041 AtomicTypes::Int64 *atomicInt,
1047 static void addInt64(AtomicTypes::Int64 *atomicInt,
1138 static unsigned int getUint(AtomicTypes::Uint
const *atomicUint);
1142 static unsigned int getUintAcquire(AtomicTypes::Uint
const *atomicUint);
1146 static unsigned int getUintRelaxed(AtomicTypes::Uint
const *atomicUint);
1150 static void initUint(AtomicTypes::Uint *atomicUint,
1151 unsigned int initialValue = 0);
1156 static void setUint(AtomicTypes::Uint *atomicUint,
unsigned int value);
1161 unsigned int value);
1166 unsigned int value);
1171 static unsigned int swapUint(AtomicTypes::Uint *atomicUint,
1172 unsigned int swapValue);
1177 static unsigned int swapUintAcqRel(AtomicTypes::Uint *atomicUint,
1178 unsigned int swapValue);
1187 unsigned int compareValue,
1188 unsigned int swapValue);
1196 unsigned int compareValue,
1197 unsigned int swapValue);
1201 static void addUint(AtomicTypes::Uint *atomicUint,
unsigned int value);
1206 unsigned int value);
1211 unsigned int value);
1216 static unsigned int addUintNv(AtomicTypes::Uint *atomicUint,
1217 unsigned int value);
1223 unsigned int value);
1229 unsigned int value);
1270 static unsigned int subtractUintNv(AtomicTypes::Uint *atomicUint,
1271 unsigned int value);
1277 unsigned int value);
1283 unsigned int value);
1294 AtomicTypes::Uint64
const *atomicUint);
1299 AtomicTypes::Uint64
const *atomicUint);
1303 static void initUint64(AtomicTypes::Uint64 *atomicUint,
1309 static void setUint64(AtomicTypes::Uint64 *atomicUint,
1350 AtomicTypes::Uint64 *atomicUint,
1356 static void addUint64(AtomicTypes::Uint64 *atomicUint,
1404 AtomicTypes::Uint64 *atomicUint);
1423 AtomicTypes::Uint64 *atomicUint);
1435 AtomicTypes::Uint64 *atomicUint,
1442 AtomicTypes::Uint64 *atomicUint,
1449 static void *
getPtr(AtomicTypes::Pointer
const *atomicPtr);
1453 static void *
getPtrAcquire(AtomicTypes::Pointer
const *atomicPtr);
1457 static void *
getPtrRelaxed(AtomicTypes::Pointer
const *atomicPtr);
1461 static void initPointer(AtomicTypes::Pointer *atomicPtr,
1462 void *initialValue = 0);
1467 static void setPtr(AtomicTypes::Pointer *atomicPtr,
1483 static void *
swapPtr(AtomicTypes::Pointer *atomicPtr,
1524 return Imp::getInt(atomicInt);
1530 return Imp::getIntAcquire(atomicInt);
1536 return Imp::getIntRelaxed(atomicInt);
1542 Imp::initInt(atomicInt, initialValue);
1548 Imp::setInt(atomicInt, value);
1554 Imp::setIntRelaxed(atomicInt, value);
1560 Imp::setIntRelease(atomicInt, value);
1566 return Imp::swapInt(atomicInt, swapValue);
1572 return Imp::swapIntAcqRel(atomicInt, swapValue);
1580 return Imp::testAndSwapInt(atomicInt, compareValue, swapValue);
1588 return Imp::testAndSwapIntAcqRel(atomicInt, compareValue, swapValue);
1596 Imp::addInt(atomicInt, value);
1602 Imp::addIntAcqRel(atomicInt, value);
1608 Imp::addIntRelaxed(atomicInt, value);
1614 return Imp::addIntNv(atomicInt, value);
1620 return Imp::addIntNvAcqRel(atomicInt, value);
1626 return Imp::addIntNvRelaxed(atomicInt, value);
1632 Imp::decrementInt(atomicInt);
1638 Imp::decrementIntAcqRel(atomicInt);
1644 return Imp::decrementIntNv(atomicInt);
1650 return Imp::decrementIntNvAcqRel(atomicInt);
1656 Imp::incrementInt(atomicInt);
1662 Imp::incrementIntAcqRel(atomicInt);
1668 return Imp::incrementIntNv(atomicInt);
1674 return Imp::incrementIntNvAcqRel(atomicInt);
1680 return Imp::subtractIntNv(atomicInt, value);
1687 return Imp::subtractIntNvAcqRel(atomicInt, value);
1694 return Imp::subtractIntNvRelaxed(atomicInt, value);
1703 return Imp::getInt64(atomicInt);
1710 return Imp::getInt64Acquire(atomicInt);
1717 return Imp::getInt64Relaxed(atomicInt);
1724 Imp::initInt64(atomicInt, initialValue);
1731 Imp::setInt64(atomicInt, value);
1738 Imp::setInt64Relaxed(atomicInt, value);
1745 Imp::setInt64Release(atomicInt, value);
1752 return Imp::swapInt64(atomicInt, swapValue);
1759 return Imp::swapInt64AcqRel(atomicInt, swapValue);
1764 AtomicTypes::Int64 *atomicInt,
1768 return Imp::testAndSwapInt64(atomicInt, compareValue, swapValue);
1773 AtomicTypes::Int64 *atomicInt,
1777 return Imp::testAndSwapInt64AcqRel(atomicInt, compareValue, swapValue);
1786 Imp::addInt64(atomicInt, value);
1793 Imp::addInt64AcqRel(atomicInt, value);
1800 Imp::addInt64Relaxed(atomicInt, value);
1807 return Imp::addInt64Nv(atomicInt, value);
1814 return Imp::addInt64NvAcqRel(atomicInt, value);
1821 return Imp::addInt64NvRelaxed(atomicInt, value);
1827 Imp::decrementInt64(atomicInt);
1833 Imp::decrementInt64AcqRel(atomicInt);
1840 return Imp::decrementInt64Nv(atomicInt);
1847 return Imp::decrementInt64NvAcqRel(atomicInt);
1853 Imp::incrementInt64(atomicInt);
1859 Imp::incrementInt64AcqRel(atomicInt);
1866 return Imp::incrementInt64Nv(atomicInt);
1873 return Imp::incrementInt64NvAcqRel(atomicInt);
1880 return Imp::subtractInt64Nv(atomicInt, value);
1885 AtomicTypes::Int64 *atomicInt,
1888 return Imp::subtractInt64NvAcqRel(atomicInt, value);
1893 AtomicTypes::Int64 *atomicInt,
1896 return Imp::subtractInt64NvRelaxed(atomicInt, value);
1904 return Imp::getUint(atomicUint);
1909 AtomicTypes::Uint
const *atomicUint)
1911 return Imp::getUintAcquire(atomicUint);
1916 AtomicTypes::Uint
const *atomicUint)
1918 return Imp::getUintRelaxed(atomicUint);
1923 unsigned int initialValue)
1925 Imp::initUint(atomicUint, initialValue);
1932 Imp::setUint(atomicUint, value);
1939 Imp::setUintRelaxed(atomicUint, value);
1946 Imp::setUintRelease(atomicUint, value);
1951 unsigned int swapValue)
1953 return Imp::swapUint(atomicUint, swapValue);
1958 unsigned int swapValue)
1960 return Imp::swapUintAcqRel(atomicUint, swapValue);
1965 unsigned int compareValue,
1966 unsigned int swapValue)
1968 return Imp::testAndSwapUint(atomicUint, compareValue, swapValue);
1973 AtomicTypes::Uint *atomicUint,
1974 unsigned int compareValue,
1975 unsigned int swapValue)
1977 return Imp::testAndSwapUintAcqRel(atomicUint, compareValue, swapValue);
1986 Imp::addUint(atomicUint, value);
1993 Imp::addUintAcqRel(atomicUint, value);
2000 Imp::addUintRelaxed(atomicUint, value);
2007 return Imp::addUintNv(atomicUint, value);
2014 return Imp::addUintNvAcqRel(atomicUint, value);
2021 return Imp::addUintNvRelaxed(atomicUint, value);
2027 Imp::decrementUint(atomicUint);
2033 Imp::decrementUintAcqRel(atomicUint);
2039 return Imp::decrementUintNv(atomicUint);
2044 AtomicTypes::Uint *atomicUint)
2046 return Imp::decrementUintNvAcqRel(atomicUint);
2052 Imp::incrementUint(atomicUint);
2058 Imp::incrementUintAcqRel(atomicUint);
2064 return Imp::incrementUintNv(atomicUint);
2069 AtomicTypes::Uint *atomicUint)
2071 return Imp::incrementUintNvAcqRel(atomicUint);
2078 return Imp::subtractUintNv(atomicUint, value);
2083 AtomicTypes::Uint *atomicUint,
2086 return Imp::subtractUintNvAcqRel(atomicUint, value);
2091 AtomicTypes::Uint *atomicUint,
2094 return Imp::subtractUintNvRelaxed(atomicUint, value);
2103 return Imp::getUint64(atomicUint);
2110 return Imp::getUint64Acquire(atomicUint);
2117 return Imp::getUint64Relaxed(atomicUint);
2124 Imp::initUint64(atomicUint, initialValue);
2131 Imp::setUint64(atomicUint, value);
2138 Imp::setUint64Relaxed(atomicUint, value);
2145 Imp::setUint64Release(atomicUint, value);
2152 return Imp::swapUint64(atomicUint, swapValue);
2157 AtomicTypes::Uint64 *atomicUint,
2160 return Imp::swapUint64AcqRel(atomicUint, swapValue);
2165 AtomicTypes::Uint64 *atomicUint,
2169 return Imp::testAndSwapUint64(atomicUint, compareValue, swapValue);
2174 AtomicTypes::Uint64 *atomicUint,
2178 return Imp::testAndSwapUint64AcqRel(atomicUint, compareValue, swapValue);
2187 Imp::addUint64(atomicUint, value);
2194 Imp::addUint64AcqRel(atomicUint, value);
2201 Imp::addUint64Relaxed(atomicUint, value);
2208 return Imp::addUint64Nv(atomicUint, value);
2213 AtomicTypes::Uint64 *atomicUint,
2216 return Imp::addUint64NvAcqRel(atomicUint, value);
2221 AtomicTypes::Uint64 *atomicUint,
2224 return Imp::addUint64NvRelaxed(atomicUint, value);
2230 Imp::decrementUint64(atomicUint);
2236 Imp::decrementUint64AcqRel(atomicUint);
2243 return Imp::decrementUint64Nv(atomicUint);
2250 return Imp::decrementUint64NvAcqRel(atomicUint);
2256 Imp::incrementUint64(atomicUint);
2262 Imp::incrementUint64AcqRel(atomicUint);
2269 return Imp::incrementUint64Nv(atomicUint);
2276 return Imp::incrementUint64NvAcqRel(atomicUint);
2281 AtomicTypes::Uint64 *atomicUint,
2284 return Imp::subtractUint64Nv(atomicUint, value);
2289 AtomicTypes::Uint64 *atomicUint,
2292 return Imp::subtractUint64NvAcqRel(atomicUint, value);
2297 AtomicTypes::Uint64 *atomicUint,
2300 return Imp::subtractUint64NvRelaxed(atomicUint, value);
2308 return Imp::getPtr(atomicPtr);
2314 return Imp::getPtrAcquire(atomicPtr);
2320 return Imp::getPtrRelaxed(atomicPtr);
2327 Imp::initPointer(atomicPtr, initialValue);
2334 Imp::setPtr(atomicPtr, value);
2341 Imp::setPtrRelaxed(atomicPtr, value);
2348 Imp::setPtrRelease(atomicPtr, value);
2355 return Imp::swapPtr(atomicPtr, swapValue);
2362 return Imp::swapPtrAcqRel(atomicPtr, swapValue);
2370 return Imp::testAndSwapPtr(atomicPtr, compareValue, swapValue);
2375 AtomicTypes::Pointer *atomicPtr,
2379 return Imp::testAndSwapPtrAcqRel(atomicPtr, compareValue, swapValue);
#define BSLS_IDENT(str)
Definition bsls_ident.h:195
Definition bdlt_iso8601util.h:691
Definition bsls_atomicoperations.h:834
static void setInt(AtomicTypes::Int *atomicInt, int value)
Definition bsls_atomicoperations.h:1546
static void incrementInt64AcqRel(AtomicTypes::Int64 *atomicInt)
Definition bsls_atomicoperations.h:1857
static Types::Uint64 getUint64Relaxed(AtomicTypes::Uint64 const *atomicUint)
Definition bsls_atomicoperations.h:2115
static void decrementUint(AtomicTypes::Uint *atomicUint)
Definition bsls_atomicoperations.h:2025
static unsigned int swapUintAcqRel(AtomicTypes::Uint *atomicUint, unsigned int swapValue)
Definition bsls_atomicoperations.h:1957
static int subtractIntNvRelaxed(AtomicTypes::Int *atomicInt, int value)
Definition bsls_atomicoperations.h:1691
static void * swapPtrAcqRel(AtomicTypes::Pointer *atomicPtr, void *swapValue)
Definition bsls_atomicoperations.h:2359
static int getIntAcquire(AtomicTypes::Int const *atomicInt)
Definition bsls_atomicoperations.h:1528
static Types::Int64 swapInt64(AtomicTypes::Int64 *atomicInt, Types::Int64 swapValue)
Definition bsls_atomicoperations.h:1749
static void * getPtr(AtomicTypes::Pointer const *atomicPtr)
Definition bsls_atomicoperations.h:2306
static void setPtrRelaxed(AtomicTypes::Pointer *atomicPtr, void *value)
Definition bsls_atomicoperations.h:2338
static int incrementIntNvAcqRel(AtomicTypes::Int *atomicInt)
Definition bsls_atomicoperations.h:1672
static void addUint64Relaxed(AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations.h:2198
static void setPtr(AtomicTypes::Pointer *atomicPtr, void *value)
Definition bsls_atomicoperations.h:2331
static unsigned int getUintAcquire(AtomicTypes::Uint const *atomicUint)
Definition bsls_atomicoperations.h:1908
static void setUint64Relaxed(AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations.h:2135
static unsigned int decrementUintNv(AtomicTypes::Uint *atomicUint)
Definition bsls_atomicoperations.h:2037
static unsigned int getUintRelaxed(AtomicTypes::Uint const *atomicUint)
Definition bsls_atomicoperations.h:1915
static void addUint(AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations.h:1983
static Types::Uint64 addUint64Nv(AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations.h:2205
static int addIntNvRelaxed(AtomicTypes::Int *atomicInt, int value)
Definition bsls_atomicoperations.h:1624
AtomicOperations_Imp Imp
Definition bsls_atomicoperations.h:837
static void setInt64Release(AtomicTypes::Int64 *atomicInt, Types::Int64 value)
Definition bsls_atomicoperations.h:1742
static unsigned int testAndSwapUint(AtomicTypes::Uint *atomicUint, unsigned int compareValue, unsigned int swapValue)
Definition bsls_atomicoperations.h:1964
static void setUint64(AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations.h:2128
static void setIntRelease(AtomicTypes::Int *atomicInt, int value)
Definition bsls_atomicoperations.h:1558
static Types::Uint64 incrementUint64Nv(AtomicTypes::Uint64 *atomicUint)
Definition bsls_atomicoperations.h:2267
static void initPointer(AtomicTypes::Pointer *atomicPtr, void *initialValue=0)
Definition bsls_atomicoperations.h:2324
static void initInt64(AtomicTypes::Int64 *atomicInt, Types::Int64 initialValue=0)
Definition bsls_atomicoperations.h:1721
static unsigned int addUintNvRelaxed(AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations.h:2018
static int decrementIntNvAcqRel(AtomicTypes::Int *atomicInt)
Definition bsls_atomicoperations.h:1648
static void decrementUintAcqRel(AtomicTypes::Uint *atomicUint)
Definition bsls_atomicoperations.h:2031
static void setUintRelaxed(AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations.h:1936
static Types::Int64 testAndSwapInt64AcqRel(AtomicTypes::Int64 *atomicInt, Types::Int64 compareValue, Types::Int64 swapValue)
Definition bsls_atomicoperations.h:1772
static void setInt64Relaxed(AtomicTypes::Int64 *atomicInt, Types::Int64 value)
Definition bsls_atomicoperations.h:1735
static Types::Int64 subtractInt64Nv(AtomicTypes::Int64 *atomicInt, Types::Int64 value)
Definition bsls_atomicoperations.h:1877
static Types::Uint64 testAndSwapUint64(AtomicTypes::Uint64 *atomicUint, Types::Uint64 compareValue, Types::Uint64 swapValue)
Definition bsls_atomicoperations.h:2164
static void setUintRelease(AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations.h:1943
static Types::Uint64 addUint64NvRelaxed(AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations.h:2220
static void incrementUint64(AtomicTypes::Uint64 *atomicUint)
Definition bsls_atomicoperations.h:2254
static unsigned int subtractUintNvRelaxed(AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations.h:2090
static Types::Int64 getInt64(AtomicTypes::Int64 const *atomicInt)
Definition bsls_atomicoperations.h:1701
static Types::Int64 addInt64NvAcqRel(AtomicTypes::Int64 *atomicInt, Types::Int64 value)
Definition bsls_atomicoperations.h:1811
static Types::Int64 incrementInt64Nv(AtomicTypes::Int64 *atomicInt)
Definition bsls_atomicoperations.h:1864
static void decrementInt64(AtomicTypes::Int64 *atomicInt)
Definition bsls_atomicoperations.h:1825
static void setInt64(AtomicTypes::Int64 *atomicInt, Types::Int64 value)
Definition bsls_atomicoperations.h:1728
static void * getPtrAcquire(AtomicTypes::Pointer const *atomicPtr)
Definition bsls_atomicoperations.h:2312
static unsigned int swapUint(AtomicTypes::Uint *atomicUint, unsigned int swapValue)
Definition bsls_atomicoperations.h:1950
static void setUint(AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations.h:1929
static unsigned int addUintNv(AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations.h:2004
static void * testAndSwapPtrAcqRel(AtomicTypes::Pointer *atomicPtr, void *compareValue, void *swapValue)
Definition bsls_atomicoperations.h:2374
static void setIntRelaxed(AtomicTypes::Int *atomicInt, int value)
Definition bsls_atomicoperations.h:1552
static Types::Uint64 testAndSwapUint64AcqRel(AtomicTypes::Uint64 *atomicUint, Types::Uint64 compareValue, Types::Uint64 swapValue)
Definition bsls_atomicoperations.h:2173
static unsigned int testAndSwapUintAcqRel(AtomicTypes::Uint *atomicUint, unsigned int compareValue, unsigned int swapValue)
Definition bsls_atomicoperations.h:1972
Atomic_TypeTraits< Imp > AtomicTypes
Definition bsls_atomicoperations.h:838
static unsigned int getUint(AtomicTypes::Uint const *atomicUint)
Definition bsls_atomicoperations.h:1902
static void addIntAcqRel(AtomicTypes::Int *atomicInt, int value)
Definition bsls_atomicoperations.h:1600
static unsigned int subtractUintNvAcqRel(AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations.h:2082
static int incrementIntNv(AtomicTypes::Int *atomicInt)
Definition bsls_atomicoperations.h:1666
static Types::Uint64 swapUint64(AtomicTypes::Uint64 *atomicUint, Types::Uint64 swapValue)
Definition bsls_atomicoperations.h:2149
static int getIntRelaxed(AtomicTypes::Int const *atomicInt)
Definition bsls_atomicoperations.h:1534
static int getInt(AtomicTypes::Int const *atomicInt)
Definition bsls_atomicoperations.h:1522
static Types::Int64 subtractInt64NvRelaxed(AtomicTypes::Int64 *atomicInt, Types::Int64 value)
Definition bsls_atomicoperations.h:1892
static void * testAndSwapPtr(AtomicTypes::Pointer *atomicPtr, void *compareValue, void *swapValue)
Definition bsls_atomicoperations.h:2366
static void decrementUint64(AtomicTypes::Uint64 *atomicUint)
Definition bsls_atomicoperations.h:2228
static void decrementInt64AcqRel(AtomicTypes::Int64 *atomicInt)
Definition bsls_atomicoperations.h:1831
static void setPtrRelease(AtomicTypes::Pointer *atomicPtr, void *value)
Definition bsls_atomicoperations.h:2345
static void addIntRelaxed(AtomicTypes::Int *atomicInt, int value)
Definition bsls_atomicoperations.h:1606
static void initInt(AtomicTypes::Int *atomicInt, int initialValue=0)
Definition bsls_atomicoperations.h:1540
static int testAndSwapIntAcqRel(AtomicTypes::Int *atomicInt, int compareValue, int swapValue)
Definition bsls_atomicoperations.h:1584
static void addInt64AcqRel(AtomicTypes::Int64 *atomicInt, Types::Int64 value)
Definition bsls_atomicoperations.h:1790
static int subtractIntNv(AtomicTypes::Int *atomicInt, int value)
Definition bsls_atomicoperations.h:1678
static void addUint64(AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations.h:2184
static Types::Uint64 swapUint64AcqRel(AtomicTypes::Uint64 *atomicUint, Types::Uint64 swapValue)
Definition bsls_atomicoperations.h:2156
static void addInt64Relaxed(AtomicTypes::Int64 *atomicInt, Types::Int64 value)
Definition bsls_atomicoperations.h:1797
static void incrementUint(AtomicTypes::Uint *atomicUint)
Definition bsls_atomicoperations.h:2050
static int addIntNv(AtomicTypes::Int *atomicInt, int value)
Definition bsls_atomicoperations.h:1612
static void incrementInt64(AtomicTypes::Int64 *atomicInt)
Definition bsls_atomicoperations.h:1851
static Types::Uint64 addUint64NvAcqRel(AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations.h:2212
static Types::Int64 getInt64Acquire(AtomicTypes::Int64 const *atomicInt)
Definition bsls_atomicoperations.h:1708
static void incrementUintAcqRel(AtomicTypes::Uint *atomicUint)
Definition bsls_atomicoperations.h:2056
static Types::Int64 incrementInt64NvAcqRel(AtomicTypes::Int64 *atomicInt)
Definition bsls_atomicoperations.h:1871
static Types::Uint64 subtractUint64NvRelaxed(AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations.h:2296
static void incrementUint64AcqRel(AtomicTypes::Uint64 *atomicUint)
Definition bsls_atomicoperations.h:2260
static unsigned int decrementUintNvAcqRel(AtomicTypes::Uint *atomicUint)
Definition bsls_atomicoperations.h:2043
static Types::Int64 testAndSwapInt64(AtomicTypes::Int64 *atomicInt, Types::Int64 compareValue, Types::Int64 swapValue)
Definition bsls_atomicoperations.h:1763
static Types::Int64 decrementInt64NvAcqRel(AtomicTypes::Int64 *atomicInt)
Definition bsls_atomicoperations.h:1845
static void initUint64(AtomicTypes::Uint64 *atomicUint, Types::Uint64 initialValue=0)
Definition bsls_atomicoperations.h:2121
static void addUintRelaxed(AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations.h:1997
static unsigned int incrementUintNv(AtomicTypes::Uint *atomicUint)
Definition bsls_atomicoperations.h:2062
static Types::Int64 addInt64Nv(AtomicTypes::Int64 *atomicInt, Types::Int64 value)
Definition bsls_atomicoperations.h:1804
static void decrementUint64AcqRel(AtomicTypes::Uint64 *atomicUint)
Definition bsls_atomicoperations.h:2234
static void * swapPtr(AtomicTypes::Pointer *atomicPtr, void *swapValue)
Definition bsls_atomicoperations.h:2352
static void decrementInt(AtomicTypes::Int *atomicInt)
Definition bsls_atomicoperations.h:1630
static Types::Uint64 getUint64(AtomicTypes::Uint64 const *atomicUint)
Definition bsls_atomicoperations.h:2101
static void addUint64AcqRel(AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations.h:2191
static int swapIntAcqRel(AtomicTypes::Int *atomicInt, int swapValue)
Definition bsls_atomicoperations.h:1570
static int testAndSwapInt(AtomicTypes::Int *atomicInt, int compareValue, int swapValue)
Definition bsls_atomicoperations.h:1576
static int addIntNvAcqRel(AtomicTypes::Int *atomicInt, int value)
Definition bsls_atomicoperations.h:1618
static Types::Uint64 subtractUint64NvAcqRel(AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations.h:2288
static unsigned int subtractUintNv(AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations.h:2075
static unsigned int incrementUintNvAcqRel(AtomicTypes::Uint *atomicUint)
Definition bsls_atomicoperations.h:2068
static void incrementIntAcqRel(AtomicTypes::Int *atomicInt)
Definition bsls_atomicoperations.h:1660
static void addInt(AtomicTypes::Int *atomicInt, int value)
Definition bsls_atomicoperations.h:1594
static void addUintAcqRel(AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations.h:1990
static int swapInt(AtomicTypes::Int *atomicInt, int swapValue)
Definition bsls_atomicoperations.h:1564
static void addInt64(AtomicTypes::Int64 *atomicInt, Types::Int64 value)
Definition bsls_atomicoperations.h:1783
static Types::Int64 decrementInt64Nv(AtomicTypes::Int64 *atomicInt)
Definition bsls_atomicoperations.h:1838
static Types::Uint64 getUint64Acquire(AtomicTypes::Uint64 const *atomicUint)
Definition bsls_atomicoperations.h:2108
static Types::Int64 addInt64NvRelaxed(AtomicTypes::Int64 *atomicInt, Types::Int64 value)
Definition bsls_atomicoperations.h:1818
static unsigned int addUintNvAcqRel(AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations.h:2011
static Types::Int64 subtractInt64NvAcqRel(AtomicTypes::Int64 *atomicInt, Types::Int64 value)
Definition bsls_atomicoperations.h:1884
static int decrementIntNv(AtomicTypes::Int *atomicInt)
Definition bsls_atomicoperations.h:1642
static Types::Uint64 subtractUint64Nv(AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations.h:2280
static void initUint(AtomicTypes::Uint *atomicUint, unsigned int initialValue=0)
Definition bsls_atomicoperations.h:1922
static Types::Uint64 incrementUint64NvAcqRel(AtomicTypes::Uint64 *atomicUint)
Definition bsls_atomicoperations.h:2274
static Types::Int64 swapInt64AcqRel(AtomicTypes::Int64 *atomicInt, Types::Int64 swapValue)
Definition bsls_atomicoperations.h:1756
static void decrementIntAcqRel(AtomicTypes::Int *atomicInt)
Definition bsls_atomicoperations.h:1636
static void * getPtrRelaxed(AtomicTypes::Pointer const *atomicPtr)
Definition bsls_atomicoperations.h:2318
static void incrementInt(AtomicTypes::Int *atomicInt)
Definition bsls_atomicoperations.h:1654
static Types::Uint64 decrementUint64NvAcqRel(AtomicTypes::Uint64 *atomicUint)
Definition bsls_atomicoperations.h:2248
static void setUint64Release(AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations.h:2142
static int subtractIntNvAcqRel(AtomicTypes::Int *atomicInt, int value)
Definition bsls_atomicoperations.h:1684
static Types::Uint64 decrementUint64Nv(AtomicTypes::Uint64 *atomicUint)
Definition bsls_atomicoperations.h:2241
static Types::Int64 getInt64Relaxed(AtomicTypes::Int64 const *atomicInt)
Definition bsls_atomicoperations.h:1715
Definition bsls_atomicoperations_default.h:333
unsigned long long Uint64
Definition bsls_types.h:137
long long Int64
Definition bsls_types.h:132