8#ifndef INCLUDED_BSLS_ATOMICOPERATIONS_DEFAULT
9#define INCLUDED_BSLS_ATOMICOPERATIONS_DEFAULT
322#include <bsls_types.h>
360 static int addIntNv(
typename AtomicTypes::Int *atomicInt,
int value);
364 static int getInt(
typename AtomicTypes::Int
const *atomicInt);
369 static void setInt(
typename AtomicTypes::Int *atomicInt,
int value);
374 static int swapInt(
typename AtomicTypes::Int *atomicInt,
int swapValue);
381 static int testAndSwapInt(
typename AtomicTypes::Int *atomicInt,
390 static int getIntAcquire(
typename AtomicTypes::Int
const *atomicInt);
394 static int getIntRelaxed(
typename AtomicTypes::Int
const *atomicInt);
398 static void initInt(
typename AtomicTypes::Int *atomicInt,
399 int initialValue = 0);
403 static void setIntRelaxed(
typename AtomicTypes::Int *atomicInt,
int value);
407 static void setIntRelease(
typename AtomicTypes::Int *atomicInt,
int value);
412 static int swapIntAcqRel(
typename AtomicTypes::Int *atomicInt,
428 static void addInt(
typename AtomicTypes::Int *atomicInt,
int value);
432 static void addIntAcqRel(
typename AtomicTypes::Int *atomicInt,
int value);
436 static void addIntRelaxed(
typename AtomicTypes::Int *atomicInt,
int value);
441 static int addIntNvAcqRel(
typename AtomicTypes::Int *atomicInt,
int value);
451 static void decrementInt(
typename AtomicTypes::Int *atomicInt);
469 static void incrementInt(
typename AtomicTypes::Int *atomicInt);
488 static int subtractIntNv(
typename AtomicTypes::Int *atomicInt,
int value);
532 static Types::Int64 addInt64Nv(
typename AtomicTypes::Int64 *atomicInt,
537 static Types::Int64 getInt64(
typename AtomicTypes::Int64
const *atomicInt);
542 static void setInt64(
typename AtomicTypes::Int64 *atomicInt,
548 static Types::Int64 swapInt64(
typename AtomicTypes::Int64 *atomicInt,
557 typename AtomicTypes::Int64 *atomicInt,
567 typename AtomicTypes::Int64
const *atomicInt);
572 typename AtomicTypes::Int64
const *atomicInt);
576 static void initInt64(
typename AtomicTypes::Int64 *atomicInt,
593 typename AtomicTypes::Int64 *atomicInt,
602 typename AtomicTypes::Int64 *atomicInt,
610 static void addInt64(
typename AtomicTypes::Int64 *atomicInt,
615 static void addInt64AcqRel(
typename AtomicTypes::Int64 *atomicInt,
627 typename AtomicTypes::Int64 *atomicInt,
634 typename AtomicTypes::Int64 *atomicInt,
639 static void decrementInt64(
typename AtomicTypes::Int64 *atomicInt);
649 typename AtomicTypes::Int64 *atomicInt);
655 typename AtomicTypes::Int64 *atomicInt);
659 static void incrementInt64(
typename AtomicTypes::Int64 *atomicInt);
669 typename AtomicTypes::Int64 *atomicInt);
675 typename AtomicTypes::Int64 *atomicInt);
687 typename AtomicTypes::Int64 *atomicInt,
694 typename AtomicTypes::Int64 *atomicInt,
749 static unsigned int getUint(
typename AtomicTypes::Uint
const *atomicUint);
754 typename AtomicTypes::Uint
const *atomicUint);
759 typename AtomicTypes::Uint
const *atomicUint);
763 static void initUint(
typename AtomicTypes::Uint *atomicUint,
764 unsigned int initialValue = 0);
769 static void setUint(
typename AtomicTypes::Uint *atomicUint,
774 static void setUintRelaxed(
typename AtomicTypes::Uint *atomicUint,
779 static void setUintRelease(
typename AtomicTypes::Uint *atomicUint,
785 static unsigned int swapUint(
typename AtomicTypes::Uint *atomicUint,
786 unsigned int swapValue);
791 static unsigned int swapUintAcqRel(
typename AtomicTypes::Uint *atomicUint,
792 unsigned int swapValue);
801 typename AtomicTypes::Uint *atomicUint,
802 unsigned int compareValue,
803 unsigned int swapValue);
811 typename AtomicTypes::Uint *atomicUint,
812 unsigned int compareValue,
813 unsigned int swapValue);
819 static void addUint(
typename AtomicTypes::Uint *atomicUint,
824 static void addUintAcqRel(
typename AtomicTypes::Uint *atomicUint,
829 static void addUintRelaxed(
typename AtomicTypes::Uint *atomicUint,
835 static unsigned int addUintNv(
typename AtomicTypes::Uint *atomicUint,
841 static unsigned int addUintNvAcqRel(
typename AtomicTypes::Uint *atomicUint,
848 typename AtomicTypes::Uint *atomicUint,
853 static void decrementUint(
typename AtomicTypes::Uint *atomicUint);
863 typename AtomicTypes::Uint *atomicUint);
869 typename AtomicTypes::Uint *atomicUint);
873 static void incrementUint(
typename AtomicTypes::Uint *atomicUint);
883 typename AtomicTypes::Uint *atomicUint);
889 typename AtomicTypes::Uint *atomicUint);
894 static unsigned int subtractUintNv(
typename AtomicTypes::Uint *atomicUint,
901 typename AtomicTypes::Uint *atomicUint,
908 typename AtomicTypes::Uint *atomicUint,
968 typename AtomicTypes::Uint64
const *atomicUint);
973 typename AtomicTypes::Uint64
const *atomicUint);
978 typename AtomicTypes::Uint64
const *atomicUint);
982 static void initUint64(
typename AtomicTypes::Uint64 *atomicUint,
988 static void setUint64(
typename AtomicTypes::Uint64 *atomicUint,
1011 typename AtomicTypes::Uint64 *atomicUint,
1021 typename AtomicTypes::Uint64 *atomicUint,
1031 typename AtomicTypes::Uint64 *atomicUint,
1039 static void addUint64(
typename AtomicTypes::Uint64 *atomicUint,
1062 typename AtomicTypes::Uint64 *atomicUint,
1069 typename AtomicTypes::Uint64 *atomicUint,
1074 static void decrementUint64(
typename AtomicTypes::Uint64 *atomicUint);
1079 typename AtomicTypes::Uint64 *atomicUint);
1085 typename AtomicTypes::Uint64 *atomicUint);
1091 typename AtomicTypes::Uint64 *atomicUint);
1095 static void incrementUint64(
typename AtomicTypes::Uint64 *atomicUint);
1100 typename AtomicTypes::Uint64 *atomicUint);
1106 typename AtomicTypes::Uint64 *atomicUint);
1112 typename AtomicTypes::Uint64 *atomicUint);
1118 typename AtomicTypes::Uint64 *atomicUint,
1125 typename AtomicTypes::Uint64 *atomicUint,
1132 typename AtomicTypes::Uint64 *atomicUint,
1182 static void *
getPtr(
typename AtomicTypes::Pointer
const *atomicPtr);
1186 static void *
getPtrAcquire(
typename AtomicTypes::Pointer
const *atomicPtr);
1190 static void *
getPtrRelaxed(
typename AtomicTypes::Pointer
const *atomicPtr);
1194 static void initPointer(
typename AtomicTypes::Pointer *atomicPtr,
1195 void *initialValue = 0);
1200 static void setPtr(
typename AtomicTypes::Pointer *atomicPtr,
1205 static void setPtrRelaxed(
typename AtomicTypes::Pointer *atomicPtr,
1210 static void setPtrRelease(
typename AtomicTypes::Pointer *atomicPtr,
1216 static void *
swapPtr(
typename AtomicTypes::Pointer *atomicPtr,
1222 static void *
swapPtrAcqRel(
typename AtomicTypes::Pointer *atomicPtr,
1230 static void *
testAndSwapPtr(
typename AtomicTypes::Pointer *atomicPtr,
1240 typename AtomicTypes::Pointer *atomicPtr,
1298 static void *
getPtr(
typename AtomicTypes::Pointer
const *atomicPtr);
1302 static void *
getPtrAcquire(
typename AtomicTypes::Pointer
const *atomicPtr);
1306 static void *
getPtrRelaxed(
typename AtomicTypes::Pointer
const *atomicPtr);
1310 static void initPointer(
typename AtomicTypes::Pointer *atomicPtr,
1311 void *initialValue = 0);
1316 static void setPtr(
typename AtomicTypes::Pointer *atomicPtr,
1321 static void setPtrRelaxed(
typename AtomicTypes::Pointer *atomicPtr,
1326 static void setPtrRelease(
typename AtomicTypes::Pointer *atomicPtr,
1332 static void *
swapPtr(
typename AtomicTypes::Pointer *atomicPtr,
1338 static void *
swapPtrAcqRel(
typename AtomicTypes::Pointer *atomicPtr,
1346 static void *
testAndSwapPtr(
typename AtomicTypes::Pointer *atomicPtr,
1356 typename AtomicTypes::Pointer *atomicPtr,
1411 return IMP::getInt(atomicInt);
1419 return atomicInt->d_value;
1425 initInt(
typename AtomicTypes::Int *atomicInt,
int initialValue)
1427 atomicInt->d_value = initialValue;
1433 setIntRelaxed(
typename AtomicTypes::Int *atomicInt,
int value)
1435 atomicInt->d_value = value;
1441 setIntRelease(
typename AtomicTypes::Int *atomicInt,
int value)
1443 IMP::setInt(atomicInt, value);
1449 swapIntAcqRel(
typename AtomicTypes::Int *atomicInt,
int swapValue)
1451 return IMP::swapInt(atomicInt, swapValue);
1457 typename AtomicTypes::Int *atomicInt,
1461 return IMP::testAndSwapInt(atomicInt, compareValue, swapValue);
1468 addInt(
typename AtomicTypes::Int *atomicInt,
int value)
1470 IMP::addIntNv(atomicInt, value);
1476 addIntAcqRel(
typename AtomicTypes::Int *atomicInt,
int value)
1478 IMP::addIntNvAcqRel(atomicInt, value);
1484 addIntRelaxed(
typename AtomicTypes::Int *atomicInt,
int value)
1486 IMP::addIntNvRelaxed(atomicInt, value);
1494 return IMP::addIntNv(atomicInt, value);
1502 return IMP::addIntNvAcqRel(atomicInt, value);
1510 IMP::addInt(atomicInt, -1);
1518 IMP::addIntAcqRel(atomicInt, -1);
1526 return IMP::addIntNv(atomicInt, -1);
1534 return IMP::addIntNvAcqRel(atomicInt, -1);
1542 IMP::addInt(atomicInt, 1);
1550 IMP::addIntAcqRel(atomicInt, 1);
1558 return IMP::addIntNv(atomicInt, 1);
1566 return IMP::addIntNvAcqRel(atomicInt, 1);
1572 subtractIntNv(
typename AtomicTypes::Int *atomicInt,
int value)
1574 return static_cast<int>(
1575 IMP::subtractUintNv(
1576 reinterpret_cast<typename AtomicTypes::Uint *
>(atomicInt),
1577 static_cast<unsigned int>(value)));
1585 return static_cast<int>(
1586 IMP::subtractUintNvAcqRel(
1587 reinterpret_cast<typename AtomicTypes::Uint *
>(atomicInt),
1588 static_cast<unsigned int>(value)));
1596 return static_cast<int>(
1597 IMP::subtractUintNvRelaxed(
1598 reinterpret_cast<typename AtomicTypes::Uint *
>(atomicInt),
1599 static_cast<unsigned int>(value)));
1612 return IMP::getInt64(atomicInt);
1620 return atomicInt->d_value;
1626 typename AtomicTypes::Int64 *atomicInt,
1629 atomicInt->d_value = initialValue;
1635 typename AtomicTypes::Int64 *atomicInt,
1638 atomicInt->d_value = value;
1644 typename AtomicTypes::Int64 *atomicInt,
1647 IMP::setInt64(atomicInt, value);
1653 typename AtomicTypes::Int64 *atomicInt,
1656 return IMP::swapInt64(atomicInt, swapValue);
1662 typename AtomicTypes::Int64 *atomicInt,
1666 return IMP::testAndSwapInt64(atomicInt, compareValue, swapValue);
1673 typename AtomicTypes::Int64 *atomicInt,
1676 IMP::addInt64Nv(atomicInt, value);
1682 typename AtomicTypes::Int64 *atomicInt,
1685 IMP::addInt64NvAcqRel(atomicInt, value);
1691 typename AtomicTypes::Int64 *atomicInt,
1694 IMP::addInt64NvRelaxed(atomicInt, value);
1700 typename AtomicTypes::Int64 *atomicInt,
1703 return IMP::addInt64Nv(atomicInt, value);
1709 typename AtomicTypes::Int64 *atomicInt,
1712 return IMP::addInt64NvAcqRel(atomicInt, value);
1720 IMP::addInt64(atomicInt, -1);
1728 IMP::addInt64AcqRel(atomicInt, -1);
1736 return IMP::addInt64Nv(atomicInt, -1);
1744 return IMP::addInt64NvAcqRel(atomicInt, -1);
1752 IMP::addInt64(atomicInt, 1);
1760 IMP::addInt64AcqRel(atomicInt, 1);
1768 return IMP::addInt64Nv(atomicInt, 1);
1776 return IMP::addInt64NvAcqRel(atomicInt, 1);
1782 typename AtomicTypes::Int64 *atomicInt,
1786 IMP::subtractUint64Nv(
1787 reinterpret_cast<typename AtomicTypes::Uint64 *
>(atomicInt),
1794 typename AtomicTypes::Int64 *atomicInt,
1798 IMP::subtractUint64NvAcqRel(
1799 reinterpret_cast<typename AtomicTypes::Uint64 *
>(atomicInt),
1806 typename AtomicTypes::Int64 *atomicInt,
1810 IMP::subtractUint64NvRelaxed(
1811 reinterpret_cast<typename AtomicTypes::Uint64 *
>(atomicInt),
1823 getUint(
typename AtomicTypes::Uint
const *atomicUint)
1825 return static_cast<unsigned int>(
1827 reinterpret_cast<typename AtomicTypes::Int
const *
>(
1836 return static_cast<unsigned int>(
1838 reinterpret_cast<typename AtomicTypes::Int
const *
>(atomicUint)));
1846 return static_cast<unsigned int>(
1848 reinterpret_cast<typename AtomicTypes::Int
const *
>(atomicUint)));
1854 initUint(
typename AtomicTypes::Uint *atomicUint,
unsigned int initialValue)
1856 atomicUint->d_value = initialValue;
1862 setUint(
typename AtomicTypes::Uint *atomicUint,
unsigned int value)
1864 IMP::setInt(
reinterpret_cast<typename AtomicTypes::Int *
>(atomicUint),
1865 static_cast<int>(value));
1871 setUintRelaxed(
typename AtomicTypes::Uint *atomicUint,
unsigned int value)
1874 reinterpret_cast<typename AtomicTypes::Int *
>(atomicUint),
1875 static_cast<int>(value));
1881 setUintRelease(
typename AtomicTypes::Uint *atomicUint,
unsigned int value)
1884 reinterpret_cast<typename AtomicTypes::Int *
>(atomicUint),
1885 static_cast<int>(value));
1891 swapUint(
typename AtomicTypes::Uint *atomicUint,
unsigned int swapValue)
1893 return static_cast<unsigned int>(
1895 reinterpret_cast<typename AtomicTypes::Int *
>(atomicUint),
1896 static_cast<int>(swapValue)));
1902 typename AtomicTypes::Uint *atomicUint,
1903 unsigned int swapValue)
1905 return static_cast<unsigned int>(
1907 reinterpret_cast<typename AtomicTypes::Int *
>(atomicUint),
1908 static_cast<int>(swapValue)));
1914 typename AtomicTypes::Uint *atomicUint,
1915 unsigned int compareValue,
1916 unsigned int swapValue)
1918 return static_cast<unsigned int>(
1919 IMP::testAndSwapInt(
1920 reinterpret_cast<typename AtomicTypes::Int *
>(atomicUint),
1921 static_cast<int>(compareValue),
1922 static_cast<int>(swapValue)));
1928 typename AtomicTypes::Uint *atomicUint,
1929 unsigned int compareValue,
1930 unsigned int swapValue)
1932 return static_cast<unsigned int>(
1933 IMP::testAndSwapIntAcqRel(
1934 reinterpret_cast<typename AtomicTypes::Int *
>(atomicUint),
1935 static_cast<int>(compareValue),
1936 static_cast<int>(swapValue)));
1943 addUint(
typename AtomicTypes::Uint *atomicUint,
unsigned int value)
1945 IMP::addInt(
reinterpret_cast<typename AtomicTypes::Int *
>(atomicUint),
1946 static_cast<int>(value));
1952 addUintAcqRel(
typename AtomicTypes::Uint *atomicUint,
unsigned int value)
1955 reinterpret_cast<typename AtomicTypes::Int *
>(atomicUint),
1956 static_cast<int>(value));
1962 addUintRelaxed(
typename AtomicTypes::Uint *atomicUint,
unsigned int value)
1965 reinterpret_cast<typename AtomicTypes::Int *
>(atomicUint),
1966 static_cast<int>(value));
1972 addUintNv(
typename AtomicTypes::Uint *atomicUint,
unsigned int value)
1974 return static_cast<unsigned int>(
1976 reinterpret_cast<typename AtomicTypes::Int *
>(atomicUint),
1977 static_cast<int>(value)));
1983 addUintNvAcqRel(
typename AtomicTypes::Uint *atomicUint,
unsigned int value)
1985 return static_cast<unsigned int>(
1986 IMP::addIntNvAcqRel(
1987 reinterpret_cast<typename AtomicTypes::Int *
>(atomicUint),
1988 static_cast<int>(value)));
1994 typename AtomicTypes::Uint *atomicUint,
1997 return static_cast<unsigned int>(
1998 IMP::addIntNvRelaxed(
1999 reinterpret_cast<typename AtomicTypes::Int *
>(atomicUint),
2000 static_cast<int>(value)));
2008 IMP::addInt(
reinterpret_cast<typename AtomicTypes::Int *
>(atomicUint), -1);
2017 reinterpret_cast<typename AtomicTypes::Int *
>(atomicUint), -1);
2025 return IMP::subtractUintNv(atomicUint, 1);
2033 return static_cast<unsigned int>(
2034 IMP::addIntNvAcqRel(
2035 reinterpret_cast<typename AtomicTypes::Int *
>(atomicUint), -1));
2043 IMP::addUint(atomicUint, 1);
2051 IMP::addUintAcqRel(atomicUint, 1);
2059 return IMP::addUintNv(atomicUint, 1);
2067 return IMP::addUintNvAcqRel(atomicUint, 1);
2073 subtractUintNv(
typename AtomicTypes::Uint *atomicUint,
unsigned int value)
2075 return static_cast<unsigned int>(
2077 reinterpret_cast<typename AtomicTypes::Int *
>(atomicUint),
2078 static_cast<int>(1 + ~value)));
2084 typename AtomicTypes::Uint *atomicUint,
2087 return static_cast<unsigned int>(
2088 IMP::addIntNvAcqRel(
2089 reinterpret_cast<typename AtomicTypes::Int *
>(atomicUint),
2090 static_cast<int>(1 + ~value)));
2096 typename AtomicTypes::Uint *atomicUint,
2099 return static_cast<unsigned int>(
2100 IMP::addIntNvRelaxed(
2101 reinterpret_cast<typename AtomicTypes::Int *
>(atomicUint),
2102 static_cast<int>(1 + ~value)));
2113 getUint64(
typename AtomicTypes::Uint64
const *atomicUint)
2116 IMP::getInt64(
reinterpret_cast<typename AtomicTypes::Int64
const *
>(
2126 reinterpret_cast<typename AtomicTypes::Int64
const *
>(atomicUint)));
2135 reinterpret_cast<typename AtomicTypes::Int64
const *
>(atomicUint)));
2141 typename AtomicTypes::Uint64 *atomicUint,
2144 atomicUint->d_value = initialValue;
2152 IMP::setInt64(
reinterpret_cast<typename AtomicTypes::Int64 *
>(atomicUint),
2159 typename AtomicTypes::Uint64 *atomicUint,
2162 IMP::setInt64Relaxed(
2163 reinterpret_cast<typename AtomicTypes::Int64 *
>(atomicUint),
2170 typename AtomicTypes::Uint64 *atomicUint,
2173 IMP::setInt64Release(
2174 reinterpret_cast<typename AtomicTypes::Int64 *
>(atomicUint),
2181 typename AtomicTypes::Uint64 *atomicUint,
2186 reinterpret_cast<typename AtomicTypes::Int64 *
>(atomicUint),
2193 typename AtomicTypes::Uint64 *atomicUint,
2197 IMP::swapInt64AcqRel(
2198 reinterpret_cast<typename AtomicTypes::Int64 *
>(atomicUint),
2205 typename AtomicTypes::Uint64 *atomicUint,
2210 IMP::testAndSwapInt64(
2211 reinterpret_cast<typename AtomicTypes::Int64 *
>(atomicUint),
2219 typename AtomicTypes::Uint64 *atomicUint,
2224 IMP::testAndSwapInt64AcqRel(
2225 reinterpret_cast<typename AtomicTypes::Int64 *
>(atomicUint),
2234 typename AtomicTypes::Uint64 *atomicUint,
Types::Uint64 value)
2236 IMP::addInt64(
reinterpret_cast<typename AtomicTypes::Int64 *
>(atomicUint),
2243 typename AtomicTypes::Uint64 *atomicUint,
Types::Uint64 value)
2245 IMP::addInt64AcqRel(
2246 reinterpret_cast<typename AtomicTypes::Int64 *
>(atomicUint),
2253 typename AtomicTypes::Uint64 *atomicUint,
Types::Uint64 value)
2255 IMP::addInt64Relaxed(
2256 reinterpret_cast<typename AtomicTypes::Int64 *
>(atomicUint),
2263 typename AtomicTypes::Uint64 *atomicUint,
Types::Uint64 value)
2267 reinterpret_cast<typename AtomicTypes::Int64 *
>(atomicUint),
2274 typename AtomicTypes::Uint64 *atomicUint,
Types::Uint64 value)
2277 IMP::addInt64NvAcqRel(
2278 reinterpret_cast<typename AtomicTypes::Int64 *
>(atomicUint),
2285 typename AtomicTypes::Uint64 *atomicUint,
Types::Uint64 value)
2288 IMP::addInt64NvRelaxed(
2289 reinterpret_cast<typename AtomicTypes::Int64 *
>(atomicUint),
2298 IMP::addInt64(
reinterpret_cast<typename AtomicTypes::Int64 *
>(atomicUint),
2307 IMP::addInt64AcqRel(
2308 reinterpret_cast<typename AtomicTypes::Int64 *
>(atomicUint), -1);
2316 return IMP::subtractUint64Nv(atomicUint, 1);
2325 IMP::addInt64NvAcqRel(
2326 reinterpret_cast<typename AtomicTypes::Int64 *
>(atomicUint), -1));
2334 IMP::addUint64(atomicUint, 1);
2342 IMP::addUint64AcqRel(atomicUint, 1);
2350 return IMP::addUint64Nv(atomicUint, 1);
2358 return IMP::addUint64NvAcqRel(atomicUint, 1);
2364 typename AtomicTypes::Uint64 *atomicUint,
Types::Uint64 value)
2368 reinterpret_cast<typename AtomicTypes::Int64 *
>(atomicUint),
2375 typename AtomicTypes::Uint64 *atomicUint,
Types::Uint64 value)
2378 IMP::addInt64NvAcqRel(
2379 reinterpret_cast<typename AtomicTypes::Int64 *
>(atomicUint),
2386 typename AtomicTypes::Uint64 *atomicUint,
Types::Uint64 value)
2389 IMP::addInt64NvRelaxed(
2390 reinterpret_cast<typename AtomicTypes::Int64 *
>(atomicUint),
2402 getPtr(
typename AtomicTypes::Pointer
const *atomicPtr)
2404 return reinterpret_cast<void *
>(
2406 reinterpret_cast<typename AtomicTypes::Int
const *
>(
2413 getPtrAcquire(
typename AtomicTypes::Pointer
const *atomicPtr)
2415 return reinterpret_cast<void *
>(
2417 reinterpret_cast<typename AtomicTypes::Int
const *
>(
2424 getPtrRelaxed(
typename AtomicTypes::Pointer
const *atomicPtr)
2426 return reinterpret_cast<void *
>(
2428 reinterpret_cast<typename AtomicTypes::Int
const *
>(
2435 typename AtomicTypes::Pointer *atomicPtr,
void *initialValue)
2437 atomicPtr->d_value = initialValue;
2443 typename AtomicTypes::Pointer *atomicPtr,
void *value)
2446 reinterpret_cast<typename AtomicTypes::Int *
>(atomicPtr),
2453 typename AtomicTypes::Pointer *atomicPtr,
void *value)
2456 reinterpret_cast<typename AtomicTypes::Int *
>(atomicPtr),
2463 typename AtomicTypes::Pointer *atomicPtr,
void *value)
2466 reinterpret_cast<typename AtomicTypes::Int *
>(atomicPtr),
2473 typename AtomicTypes::Pointer *atomicPtr,
void *swapValue)
2475 return reinterpret_cast<void *
>(
2477 reinterpret_cast<typename AtomicTypes::Int *
>(atomicPtr),
2484 typename AtomicTypes::Pointer *atomicPtr,
void *swapValue)
2486 return reinterpret_cast<void *
>(
2488 reinterpret_cast<typename AtomicTypes::Int *
>(atomicPtr),
2495 typename AtomicTypes::Pointer *atomicPtr,
2499 return reinterpret_cast<void *
>(
2500 IMP::testAndSwapInt(
2501 reinterpret_cast<typename AtomicTypes::Int *
>(atomicPtr),
2509 typename AtomicTypes::Pointer *atomicPtr,
2513 return reinterpret_cast<void *
>(
2514 IMP::testAndSwapIntAcqRel(
2515 reinterpret_cast<typename AtomicTypes::Int *
>(atomicPtr),
2528 getPtr(
typename AtomicTypes::Pointer
const *atomicPtr)
2530 return reinterpret_cast<void *
>(
2532 reinterpret_cast<typename AtomicTypes::Int64
const *
>(
2539 getPtrAcquire(
typename AtomicTypes::Pointer
const *atomicPtr)
2541 return reinterpret_cast<void *
>(
2542 IMP::getInt64Acquire(
2543 reinterpret_cast<typename AtomicTypes::Int64
const *
>(
2550 getPtrRelaxed(
typename AtomicTypes::Pointer
const *atomicPtr)
2552 return reinterpret_cast<void *
>(
2553 IMP::getInt64Relaxed(
2554 reinterpret_cast<typename AtomicTypes::Int64
const *
>(
2561 typename AtomicTypes::Pointer *atomicPtr,
void *initialValue)
2563 atomicPtr->d_value = initialValue;
2569 typename AtomicTypes::Pointer *atomicPtr,
void *value)
2572 reinterpret_cast<typename AtomicTypes::Int64 *
>(atomicPtr),
2579 typename AtomicTypes::Pointer *atomicPtr,
void *value)
2581 IMP::setInt64Relaxed(
2582 reinterpret_cast<typename AtomicTypes::Int64 *
>(atomicPtr),
2589 typename AtomicTypes::Pointer *atomicPtr,
void *value)
2591 IMP::setInt64Release(
2592 reinterpret_cast<typename AtomicTypes::Int64 *
>(atomicPtr),
2599 typename AtomicTypes::Pointer *atomicPtr,
void *swapValue)
2601 return reinterpret_cast<void *
>(
2603 reinterpret_cast<typename AtomicTypes::Int64 *
>(atomicPtr),
2610 typename AtomicTypes::Pointer *atomicPtr,
void *swapValue)
2612 return reinterpret_cast<void *
>(
2613 IMP::swapInt64AcqRel(
2614 reinterpret_cast<typename AtomicTypes::Int64 *
>(atomicPtr),
2621 typename AtomicTypes::Pointer *atomicPtr,
2625 return reinterpret_cast<void *
>(
2626 IMP::testAndSwapInt64(
2627 reinterpret_cast<typename AtomicTypes::Int64 *
>(atomicPtr),
2635 typename AtomicTypes::Pointer *atomicPtr,
2639 return reinterpret_cast<void *
>(
2640 IMP::testAndSwapInt64AcqRel(
2641 reinterpret_cast<typename AtomicTypes::Int64 *
>(atomicPtr),
#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_default.h:1376
Definition bsls_atomicoperations_default.h:1394
Definition bsls_atomicoperations_default.h:516
static void setInt64Release(typename AtomicTypes::Int64 *atomicInt, Types::Int64 value)
Definition bsls_atomicoperations_default.h:1643
static Types::Int64 incrementInt64NvAcqRel(typename AtomicTypes::Int64 *atomicInt)
Definition bsls_atomicoperations_default.h:1774
static Types::Int64 addInt64NvAcqRel(typename AtomicTypes::Int64 *atomicInt, Types::Int64 value)
Definition bsls_atomicoperations_default.h:1699
static void initInt64(typename AtomicTypes::Int64 *atomicInt, Types::Int64 initialValue=0)
Definition bsls_atomicoperations_default.h:1625
Atomic_TypeTraits< IMP > AtomicTypes
Definition bsls_atomicoperations_default.h:519
static void decrementInt64(typename AtomicTypes::Int64 *atomicInt)
Definition bsls_atomicoperations_default.h:1718
static void incrementInt64(typename AtomicTypes::Int64 *atomicInt)
Definition bsls_atomicoperations_default.h:1750
static void addInt64Relaxed(typename AtomicTypes::Int64 *atomicInt, Types::Int64 value)
Definition bsls_atomicoperations_default.h:1690
static Types::Int64 subtractInt64NvAcqRel(typename AtomicTypes::Int64 *atomicInt, Types::Int64 value)
Definition bsls_atomicoperations_default.h:1793
static Types::Int64 incrementInt64Nv(typename AtomicTypes::Int64 *atomicInt)
Definition bsls_atomicoperations_default.h:1766
static Types::Int64 testAndSwapInt64AcqRel(typename AtomicTypes::Int64 *atomicInt, Types::Int64 compareValue, Types::Int64 swapValue)
Definition bsls_atomicoperations_default.h:1661
static Types::Int64 subtractInt64Nv(typename AtomicTypes::Int64 *atomicInt, Types::Int64 value)
Definition bsls_atomicoperations_default.h:1781
static Types::Int64 getInt64Relaxed(typename AtomicTypes::Int64 const *atomicInt)
Definition bsls_atomicoperations_default.h:1618
static void addInt64AcqRel(typename AtomicTypes::Int64 *atomicInt, Types::Int64 value)
Definition bsls_atomicoperations_default.h:1681
static Types::Int64 decrementInt64Nv(typename AtomicTypes::Int64 *atomicInt)
Definition bsls_atomicoperations_default.h:1734
static void setInt64Relaxed(typename AtomicTypes::Int64 *atomicInt, Types::Int64 value)
Definition bsls_atomicoperations_default.h:1634
static void incrementInt64AcqRel(typename AtomicTypes::Int64 *atomicInt)
Definition bsls_atomicoperations_default.h:1758
static void decrementInt64AcqRel(typename AtomicTypes::Int64 *atomicInt)
Definition bsls_atomicoperations_default.h:1726
static Types::Int64 getInt64Acquire(typename AtomicTypes::Int64 const *atomicInt)
Definition bsls_atomicoperations_default.h:1610
static Types::Int64 decrementInt64NvAcqRel(typename AtomicTypes::Int64 *atomicInt)
Definition bsls_atomicoperations_default.h:1742
static Types::Int64 subtractInt64NvRelaxed(typename AtomicTypes::Int64 *atomicInt, Types::Int64 value)
Definition bsls_atomicoperations_default.h:1805
static Types::Int64 swapInt64AcqRel(typename AtomicTypes::Int64 *atomicInt, Types::Int64 swapValue)
Definition bsls_atomicoperations_default.h:1652
static void addInt64(typename AtomicTypes::Int64 *atomicInt, Types::Int64 value)
Definition bsls_atomicoperations_default.h:1672
static Types::Int64 addInt64NvRelaxed(typename AtomicTypes::Int64 *atomicInt, Types::Int64 value)
Definition bsls_atomicoperations_default.h:1708
Definition bsls_atomicoperations_default.h:344
static void setIntRelease(typename AtomicTypes::Int *atomicInt, int value)
Definition bsls_atomicoperations_default.h:1441
static int testAndSwapIntAcqRel(typename AtomicTypes::Int *atomicInt, int compareValue, int swapValue)
Definition bsls_atomicoperations_default.h:1456
static void addIntRelaxed(typename AtomicTypes::Int *atomicInt, int value)
Definition bsls_atomicoperations_default.h:1484
static void incrementIntAcqRel(typename AtomicTypes::Int *atomicInt)
Definition bsls_atomicoperations_default.h:1548
static void addInt(typename AtomicTypes::Int *atomicInt, int value)
Definition bsls_atomicoperations_default.h:1468
static int decrementIntNvAcqRel(typename AtomicTypes::Int *atomicInt)
Definition bsls_atomicoperations_default.h:1532
static void incrementInt(typename AtomicTypes::Int *atomicInt)
Definition bsls_atomicoperations_default.h:1540
static int addIntNvRelaxed(typename AtomicTypes::Int *atomicInt, int value)
Definition bsls_atomicoperations_default.h:1500
static int swapIntAcqRel(typename AtomicTypes::Int *atomicInt, int swapValue)
Definition bsls_atomicoperations_default.h:1449
Atomic_TypeTraits< IMP > AtomicTypes
Definition bsls_atomicoperations_default.h:347
static void addIntAcqRel(typename AtomicTypes::Int *atomicInt, int value)
Definition bsls_atomicoperations_default.h:1476
static void initInt(typename AtomicTypes::Int *atomicInt, int initialValue=0)
Definition bsls_atomicoperations_default.h:1425
static int incrementIntNvAcqRel(typename AtomicTypes::Int *atomicInt)
Definition bsls_atomicoperations_default.h:1564
static int getIntRelaxed(typename AtomicTypes::Int const *atomicInt)
Definition bsls_atomicoperations_default.h:1417
static void setIntRelaxed(typename AtomicTypes::Int *atomicInt, int value)
Definition bsls_atomicoperations_default.h:1433
static int getIntAcquire(typename AtomicTypes::Int const *atomicInt)
Definition bsls_atomicoperations_default.h:1409
static int addIntNvAcqRel(typename AtomicTypes::Int *atomicInt, int value)
Definition bsls_atomicoperations_default.h:1492
static int incrementIntNv(typename AtomicTypes::Int *atomicInt)
Definition bsls_atomicoperations_default.h:1556
static void decrementInt(typename AtomicTypes::Int *atomicInt)
Definition bsls_atomicoperations_default.h:1508
static int decrementIntNv(typename AtomicTypes::Int *atomicInt)
Definition bsls_atomicoperations_default.h:1524
static void decrementIntAcqRel(typename AtomicTypes::Int *atomicInt)
Definition bsls_atomicoperations_default.h:1516
static int subtractIntNvAcqRel(typename AtomicTypes::Int *atomicInt, int value)
Definition bsls_atomicoperations_default.h:1583
static int subtractIntNv(typename AtomicTypes::Int *atomicInt, int value)
Definition bsls_atomicoperations_default.h:1572
static int subtractIntNvRelaxed(typename AtomicTypes::Int *atomicInt, int value)
Definition bsls_atomicoperations_default.h:1594
Definition bsls_atomicoperations_default.h:1174
static void initPointer(typename AtomicTypes::Pointer *atomicPtr, void *initialValue=0)
Definition bsls_atomicoperations_default.h:2434
static void setPtrRelease(typename AtomicTypes::Pointer *atomicPtr, void *value)
Definition bsls_atomicoperations_default.h:2462
static void * getPtrAcquire(typename AtomicTypes::Pointer const *atomicPtr)
Definition bsls_atomicoperations_default.h:2413
Atomic_TypeTraits< IMP > AtomicTypes
Definition bsls_atomicoperations_default.h:1176
static void * getPtr(typename AtomicTypes::Pointer const *atomicPtr)
Definition bsls_atomicoperations_default.h:2402
static void setPtrRelaxed(typename AtomicTypes::Pointer *atomicPtr, void *value)
Definition bsls_atomicoperations_default.h:2452
static void * swapPtr(typename AtomicTypes::Pointer *atomicPtr, void *swapValue)
Definition bsls_atomicoperations_default.h:2472
static void * testAndSwapPtrAcqRel(typename AtomicTypes::Pointer *atomicPtr, void *compareValue, void *swapValue)
Definition bsls_atomicoperations_default.h:2508
static void * swapPtrAcqRel(typename AtomicTypes::Pointer *atomicPtr, void *swapValue)
Definition bsls_atomicoperations_default.h:2483
static void setPtr(typename AtomicTypes::Pointer *atomicPtr, void *value)
Definition bsls_atomicoperations_default.h:2442
static void * testAndSwapPtr(typename AtomicTypes::Pointer *atomicPtr, void *compareValue, void *swapValue)
Definition bsls_atomicoperations_default.h:2494
static void * getPtrRelaxed(typename AtomicTypes::Pointer const *atomicPtr)
Definition bsls_atomicoperations_default.h:2424
Definition bsls_atomicoperations_default.h:1290
static void * swapPtrAcqRel(typename AtomicTypes::Pointer *atomicPtr, void *swapValue)
Definition bsls_atomicoperations_default.h:2609
static void * swapPtr(typename AtomicTypes::Pointer *atomicPtr, void *swapValue)
Definition bsls_atomicoperations_default.h:2598
static void * testAndSwapPtrAcqRel(typename AtomicTypes::Pointer *atomicPtr, void *compareValue, void *swapValue)
Definition bsls_atomicoperations_default.h:2634
static void initPointer(typename AtomicTypes::Pointer *atomicPtr, void *initialValue=0)
Definition bsls_atomicoperations_default.h:2560
Atomic_TypeTraits< IMP > AtomicTypes
Definition bsls_atomicoperations_default.h:1292
static void * getPtrAcquire(typename AtomicTypes::Pointer const *atomicPtr)
Definition bsls_atomicoperations_default.h:2539
static void * getPtrRelaxed(typename AtomicTypes::Pointer const *atomicPtr)
Definition bsls_atomicoperations_default.h:2550
static void setPtrRelaxed(typename AtomicTypes::Pointer *atomicPtr, void *value)
Definition bsls_atomicoperations_default.h:2578
static void * getPtr(typename AtomicTypes::Pointer const *atomicPtr)
Definition bsls_atomicoperations_default.h:2528
static void setPtrRelease(typename AtomicTypes::Pointer *atomicPtr, void *value)
Definition bsls_atomicoperations_default.h:2588
static void * testAndSwapPtr(typename AtomicTypes::Pointer *atomicPtr, void *compareValue, void *swapValue)
Definition bsls_atomicoperations_default.h:2620
static void setPtr(typename AtomicTypes::Pointer *atomicPtr, void *value)
Definition bsls_atomicoperations_default.h:2568
Definition bsls_atomicoperations_default.h:958
static Types::Uint64 swapUint64(typename AtomicTypes::Uint64 *atomicUint, Types::Uint64 swapValue)
Definition bsls_atomicoperations_default.h:2180
static Types::Uint64 decrementUint64Nv(typename AtomicTypes::Uint64 *atomicUint)
Definition bsls_atomicoperations_default.h:2314
static void initUint64(typename AtomicTypes::Uint64 *atomicUint, Types::Uint64 initialValue=0)
Definition bsls_atomicoperations_default.h:2140
static Types::Uint64 incrementUint64Nv(typename AtomicTypes::Uint64 *atomicUint)
Definition bsls_atomicoperations_default.h:2348
static void addUint64(typename AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations_default.h:2233
static void setUint64Relaxed(typename AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations_default.h:2158
static Types::Uint64 subtractUint64Nv(typename AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations_default.h:2363
static Types::Uint64 subtractUint64NvAcqRel(typename AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations_default.h:2374
static void setUint64Release(typename AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations_default.h:2169
static void incrementUint64AcqRel(typename AtomicTypes::Uint64 *atomicUint)
Definition bsls_atomicoperations_default.h:2340
static void decrementUint64(typename AtomicTypes::Uint64 *atomicUint)
Definition bsls_atomicoperations_default.h:2296
static Types::Uint64 getUint64(typename AtomicTypes::Uint64 const *atomicUint)
Definition bsls_atomicoperations_default.h:2113
static Types::Uint64 addUint64NvRelaxed(typename AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations_default.h:2284
static void incrementUint64(typename AtomicTypes::Uint64 *atomicUint)
Definition bsls_atomicoperations_default.h:2332
static Types::Uint64 getUint64Relaxed(typename AtomicTypes::Uint64 const *atomicUint)
Definition bsls_atomicoperations_default.h:2132
static Types::Uint64 decrementUint64NvAcqRel(typename AtomicTypes::Uint64 *atomicUint)
Definition bsls_atomicoperations_default.h:2322
Atomic_TypeTraits< IMP > AtomicTypes
Definition bsls_atomicoperations_default.h:961
static void setUint64(typename AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations_default.h:2150
static void addUint64Relaxed(typename AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations_default.h:2252
static Types::Uint64 addUint64NvAcqRel(typename AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations_default.h:2273
static void addUint64AcqRel(typename AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations_default.h:2242
static Types::Uint64 testAndSwapUint64(typename AtomicTypes::Uint64 *atomicUint, Types::Uint64 compareValue, Types::Uint64 swapValue)
Definition bsls_atomicoperations_default.h:2204
static Types::Uint64 incrementUint64NvAcqRel(typename AtomicTypes::Uint64 *atomicUint)
Definition bsls_atomicoperations_default.h:2356
static Types::Uint64 subtractUint64NvRelaxed(typename AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations_default.h:2385
static Types::Uint64 getUint64Acquire(typename AtomicTypes::Uint64 const *atomicUint)
Definition bsls_atomicoperations_default.h:2123
static Types::Uint64 testAndSwapUint64AcqRel(typename AtomicTypes::Uint64 *atomicUint, Types::Uint64 compareValue, Types::Uint64 swapValue)
Definition bsls_atomicoperations_default.h:2218
static void decrementUint64AcqRel(typename AtomicTypes::Uint64 *atomicUint)
Definition bsls_atomicoperations_default.h:2305
static Types::Uint64 swapUint64AcqRel(typename AtomicTypes::Uint64 *atomicUint, Types::Uint64 swapValue)
Definition bsls_atomicoperations_default.h:2192
static Types::Uint64 addUint64Nv(typename AtomicTypes::Uint64 *atomicUint, Types::Uint64 value)
Definition bsls_atomicoperations_default.h:2262
Definition bsls_atomicoperations_default.h:740
static unsigned int subtractUintNvRelaxed(typename AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations_default.h:2095
static unsigned int swapUint(typename AtomicTypes::Uint *atomicUint, unsigned int swapValue)
Definition bsls_atomicoperations_default.h:1891
static void addUintRelaxed(typename AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations_default.h:1962
static unsigned int incrementUintNv(typename AtomicTypes::Uint *atomicUint)
Definition bsls_atomicoperations_default.h:2057
static unsigned int decrementUintNv(typename AtomicTypes::Uint *atomicUint)
Definition bsls_atomicoperations_default.h:2023
static void addUintAcqRel(typename AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations_default.h:1952
static unsigned int addUintNv(typename AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations_default.h:1972
static void setUintRelaxed(typename AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations_default.h:1871
static unsigned int addUintNvRelaxed(typename AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations_default.h:1993
static void setUintRelease(typename AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations_default.h:1881
static unsigned int decrementUintNvAcqRel(typename AtomicTypes::Uint *atomicUint)
Definition bsls_atomicoperations_default.h:2031
static unsigned int incrementUintNvAcqRel(typename AtomicTypes::Uint *atomicUint)
Definition bsls_atomicoperations_default.h:2065
static unsigned int getUintAcquire(typename AtomicTypes::Uint const *atomicUint)
Definition bsls_atomicoperations_default.h:1834
static void incrementUintAcqRel(typename AtomicTypes::Uint *atomicUint)
Definition bsls_atomicoperations_default.h:2049
static void decrementUint(typename AtomicTypes::Uint *atomicUint)
Definition bsls_atomicoperations_default.h:2006
static unsigned int swapUintAcqRel(typename AtomicTypes::Uint *atomicUint, unsigned int swapValue)
Definition bsls_atomicoperations_default.h:1901
static void addUint(typename AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations_default.h:1943
static unsigned int subtractUintNvAcqRel(typename AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations_default.h:2083
static void initUint(typename AtomicTypes::Uint *atomicUint, unsigned int initialValue=0)
Definition bsls_atomicoperations_default.h:1854
static unsigned int addUintNvAcqRel(typename AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations_default.h:1983
static unsigned int testAndSwapUint(typename AtomicTypes::Uint *atomicUint, unsigned int compareValue, unsigned int swapValue)
Definition bsls_atomicoperations_default.h:1913
static void setUint(typename AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations_default.h:1862
static void incrementUint(typename AtomicTypes::Uint *atomicUint)
Definition bsls_atomicoperations_default.h:2041
static void decrementUintAcqRel(typename AtomicTypes::Uint *atomicUint)
Definition bsls_atomicoperations_default.h:2014
Atomic_TypeTraits< IMP > AtomicTypes
Definition bsls_atomicoperations_default.h:743
static unsigned int subtractUintNv(typename AtomicTypes::Uint *atomicUint, unsigned int value)
Definition bsls_atomicoperations_default.h:2073
static unsigned int testAndSwapUintAcqRel(typename AtomicTypes::Uint *atomicUint, unsigned int compareValue, unsigned int swapValue)
Definition bsls_atomicoperations_default.h:1927
static unsigned int getUint(typename AtomicTypes::Uint const *atomicUint)
Definition bsls_atomicoperations_default.h:1823
static unsigned int getUintRelaxed(typename AtomicTypes::Uint const *atomicUint)
Definition bsls_atomicoperations_default.h:1844
Definition bsls_atomicoperations_default.h:333
unsigned long long Uint64
Definition bsls_types.h:139
std::ptrdiff_t IntPtr
Definition bsls_types.h:132
long long Int64
Definition bsls_types.h:134