[#BloombergLP-bsls-AtomicOperations_DefaultUint64-00]
= xref:BloombergLP.adoc[BloombergLP]::xref:BloombergLP/bsls.adoc[bsls]::AtomicOperations&lowbar;DefaultUint64
:relfileprefix: ../../
:mrdocs:

This class provides default implementations of non&hyphen;essential atomic operations for the 64&hyphen;bit unsigned integer type independent on any specific platform&period; It also provides prototypes for the atomic operations for the 64&hyphen;bit unsigned integer type that have to be implemented separately for each specific platform&period; These platform&hyphen;independent and platform&hyphen;specific atomic operations together form a full set of atomic operations for the 64&hyphen;bit unsigned integer type&period;

== Synopsis

Declared in `&lt;bsls&lowbar;atomicoperations&lowbar;default&period;h&gt;`

[source,cpp,subs="verbatim,replacements,macros,-callouts"]
----
template&lt;class IMP&gt;
struct AtomicOperations&lowbar;DefaultUint64;
----

== Description

Note that `AtomicOperations&lowbar;DefaultUint64` is implemented in terms of the following atomic operations on the Int64 type that must be provided by the `IMP` template parameter&period; &grave; static Types&colon;&colon;Int64 getInt64( typename AtomicTypes&colon;&colon;Int64 const &ast;atomicInt)&semi; static Types&colon;&colon;Int64 getInt64Relaxed( typename AtomicTypes&colon;&colon;Int64 const &ast;atomicInt)&semi; static Types&colon;&colon;Int64 getInt64Acquire( typename AtomicTypes&colon;&colon;Int64 const &ast;atomicInt)&semi; static void setInt64(typename AtomicTypes&colon;&colon;Int64 &ast;atomicInt, Types&colon;&colon;Int64 value)&semi; static void setInt64Relaxed(typename AtomicTypes&colon;&colon;Int64 &ast;atomicInt, Types&colon;&colon;Int64 value)&semi; static void setInt64Release(typename AtomicTypes&colon;&colon;Int64 &ast;atomicInt, Types&colon;&colon;Int64 value)&semi; static Types&colon;&colon;Int64 swapInt64(typename AtomicTypes&colon;&colon;Int64 &ast;atomicInt, Types&colon;&colon;Int64 swapValue)&semi; static Types&colon;&colon;Int64 swapInt64AcqRel( typename AtomicTypes&colon;&colon;Int64 &ast;atomicInt, Types&colon;&colon;Int64 swapValue)&semi; static Types&colon;&colon;Int64 testAndSwapInt64( typename AtomicTypes&colon;&colon;Int64 &ast;atomicInt, Types&colon;&colon;Int64 compareValue, Types&colon;&colon;Int64 swapValue)&semi; static Types&colon;&colon;Int64 testAndSwapInt64AcqRel( typename AtomicTypes&colon;&colon;Int64 &ast;atomicInt, Types&colon;&colon;Int64 compareValue, Types&colon;&colon;Int64 swapValue)&semi; &grave;

== Type Aliases

[cols="1,4"]
|===
| Name| Description
| xref:BloombergLP/bsls/AtomicOperations_DefaultUint64-00/AtomicTypes.adoc[`AtomicTypes`] 
| This `typedef` is an alias to `Atomic&lowbar;TypeTraits&lt;IMP&gt;`&period;
|===


== Static Member Functions

[cols="1,4"]
|===
| Name| Description
| xref:BloombergLP/bsls/AtomicOperations_DefaultUint64-00/addUint64.adoc[`addUint64`] 
| Atomically add to the specified `atomicUint` the specified `value`, providing the sequential consistency memory ordering guarantee&period;
| xref:BloombergLP/bsls/AtomicOperations_DefaultUint64-00/addUint64AcqRel.adoc[`addUint64AcqRel`] 
| Atomically add to the specified `atomicUint` the specified `value`, providing the acquire&sol;release memory ordering guarantee&period;
| xref:BloombergLP/bsls/AtomicOperations_DefaultUint64-00/addUint64Nv.adoc[`addUint64Nv`] 
| Atomically add to the specified `atomicUint` the specified `value` and return the resulting value, providing the sequential consistency memory ordering guarantee&period;
| xref:BloombergLP/bsls/AtomicOperations_DefaultUint64-00/addUint64NvAcqRel.adoc[`addUint64NvAcqRel`] 
| Atomically add to the specified `atomicUint` the specified `value` and return the resulting value, providing the acquire&sol;release memory ordering guarantee&period;
| xref:BloombergLP/bsls/AtomicOperations_DefaultUint64-00/addUint64NvRelaxed.adoc[`addUint64NvRelaxed`] 
| Atomically add to the specified `atomicUint` the specified `value` and return the resulting value, without providing any memory ordering guarantees&period;
| xref:BloombergLP/bsls/AtomicOperations_DefaultUint64-00/addUint64Relaxed.adoc[`addUint64Relaxed`] 
| Atomically add to the specified `atomicUint` the specified `value`, without providing any memory ordering guarantees&period;
| xref:BloombergLP/bsls/AtomicOperations_DefaultUint64-00/decrementUint64.adoc[`decrementUint64`] 
| Atomically decrement the specified `atomicUint` by 1, providing the sequential consistency memory ordering guarantee&period;
| xref:BloombergLP/bsls/AtomicOperations_DefaultUint64-00/decrementUint64AcqRel.adoc[`decrementUint64AcqRel`] 
| Atomically decrement the specified `atomicUint` by 1, providing the acquire&sol;release memory ordering guarantee&period;
| xref:BloombergLP/bsls/AtomicOperations_DefaultUint64-00/decrementUint64Nv.adoc[`decrementUint64Nv`] 
| Atomically decrement the specified `atomicUint` by 1 and return the resulting value, providing the sequential consistency memory ordering guarantee&period;
| xref:BloombergLP/bsls/AtomicOperations_DefaultUint64-00/decrementUint64NvAcqRel.adoc[`decrementUint64NvAcqRel`] 
| Atomically decrement the specified `atomicUint` by 1 and return the resulting value, providing the acquire&sol;release memory ordering guarantee&period;
| xref:BloombergLP/bsls/AtomicOperations_DefaultUint64-00/getUint64.adoc[`getUint64`] 
| Atomically retrieve the value of the specified `atomicUint`, providing the sequential consistency memory ordering guarantee&period;
| xref:BloombergLP/bsls/AtomicOperations_DefaultUint64-00/getUint64Acquire.adoc[`getUint64Acquire`] 
| Atomically retrieve the value of the specified `atomicUint`, providing the acquire memory ordering guarantee&period;
| xref:BloombergLP/bsls/AtomicOperations_DefaultUint64-00/getUint64Relaxed.adoc[`getUint64Relaxed`] 
| Atomically retrieve the value of the specified `atomicUint`, without providing any memory ordering guarantees&period;
| xref:BloombergLP/bsls/AtomicOperations_DefaultUint64-00/incrementUint64.adoc[`incrementUint64`] 
| Atomically increment the value of the specified `atomicUint` by 1, providing the sequential consistency memory ordering guarantee&period;
| xref:BloombergLP/bsls/AtomicOperations_DefaultUint64-00/incrementUint64AcqRel.adoc[`incrementUint64AcqRel`] 
| Atomically increment the value of the specified `atomicUint` by 1, providing the acquire&sol;release memory ordering guarantee&period;
| xref:BloombergLP/bsls/AtomicOperations_DefaultUint64-00/incrementUint64Nv.adoc[`incrementUint64Nv`] 
| Atomically increment the specified `atomicUint` by 1 and return the resulting value, providing the sequential consistency memory ordering guarantee&period;
| xref:BloombergLP/bsls/AtomicOperations_DefaultUint64-00/incrementUint64NvAcqRel.adoc[`incrementUint64NvAcqRel`] 
| Atomically increment the specified `atomicUint` by 1 and return the resulting value, providing the acquire&sol;release memory ordering guarantee&period;
| xref:BloombergLP/bsls/AtomicOperations_DefaultUint64-00/initUint64.adoc[`initUint64`] 
| Initialize the specified `atomicUint` and set its value to the optionally specified `initialValue`&period;
| xref:BloombergLP/bsls/AtomicOperations_DefaultUint64-00/setUint64.adoc[`setUint64`] 
| Atomically set the value of the specified `atomicUint` to the specified `value`, providing the sequential consistency memory ordering guarantee&period;
| xref:BloombergLP/bsls/AtomicOperations_DefaultUint64-00/setUint64Relaxed.adoc[`setUint64Relaxed`] 
| Atomically set the value of the specified `atomicUint` to the specified `value`, without providing any memory ordering guarantees&period;
| xref:BloombergLP/bsls/AtomicOperations_DefaultUint64-00/setUint64Release.adoc[`setUint64Release`] 
| Atomically set the value of the specified `atomicUint` to the specified `value`, providing the release memory ordering guarantee&period;
| xref:BloombergLP/bsls/AtomicOperations_DefaultUint64-00/subtractUint64Nv.adoc[`subtractUint64Nv`] 
| Atomically subtract from the specified `atomicUint` the specified `value` and return the resulting value, providing the sequential consistency memory ordering guarantee&period;
| xref:BloombergLP/bsls/AtomicOperations_DefaultUint64-00/subtractUint64NvAcqRel.adoc[`subtractUint64NvAcqRel`] 
| Atomically subtract from the specified `atomicUint` the specified `value` and return the resulting value, providing the acquire&sol;release memory ordering guarantee&period;
| xref:BloombergLP/bsls/AtomicOperations_DefaultUint64-00/subtractUint64NvRelaxed.adoc[`subtractUint64NvRelaxed`] 
| Atomically subtract from the specified `atomicUint` the specified `value` and return the resulting value, without providing any memory ordering guarantees&period;
| xref:BloombergLP/bsls/AtomicOperations_DefaultUint64-00/swapUint64.adoc[`swapUint64`] 
| Atomically set the value of the specified `atomicUint` to the specified `swapValue` and return its previous value, providing the sequential consistency memory ordering guarantee&period;
| xref:BloombergLP/bsls/AtomicOperations_DefaultUint64-00/swapUint64AcqRel.adoc[`swapUint64AcqRel`] 
| Atomically set the value of the specified `atomicUint` to the specified `swapValue` and return its previous value, providing the acquire&sol;release memory ordering guarantee&period;
| xref:BloombergLP/bsls/AtomicOperations_DefaultUint64-00/testAndSwapUint64.adoc[`testAndSwapUint64`] 
| Conditionally set the value of the specified `atomicUint` to the specified `swapValue` if and only if the value of `atomicUint` equals the value of the specified `compareValue`, and return the initial value of `atomicUint`, providing the sequential consistency memory ordering guarantee&period; The whole operation is performed atomically&period;
| xref:BloombergLP/bsls/AtomicOperations_DefaultUint64-00/testAndSwapUint64AcqRel.adoc[`testAndSwapUint64AcqRel`] 
| Conditionally set the value of the specified `atomicUint` to the specified `swapValue` if and only if the value of `atomicUint` equals the value of the specified `compareValue`, and return the initial value of `atomicUint`, providing the acquire&sol;release memory ordering guarantee&period; The whole operation is performed atomically&period;
|===


== Derived Classes

[cols="1,4"]
|===
| Name| Description
| xref:BloombergLP/bsls/AtomicOperations_Default32.adoc[`AtomicOperations&lowbar;Default32`] 
| This class provides default implementations of non&hyphen;essential atomic operations for the 32&hyphen;bit integer, 64&hyphen;bit integer, the 32&hyphen;bit unsigned integer, 64&hyphen;bit unsigned integer and 32&hyphen;bit pointer type for a generic 32&hyphen;bit platform&period;
| xref:BloombergLP/bsls/AtomicOperations_Default64-0b.adoc[`AtomicOperations&lowbar;Default64`] 
| This class provides default implementations of non&hyphen;essential atomic operations for the 32&hyphen;bit integer, 64&hyphen;bit integer, the 32&hyphen;bit unsigned integer, 64&hyphen;bit unsigned integer and 64&hyphen;bit pointer type for a generic 64&hyphen;bit platform&period;
|===


[.small]#Created with https://www.mrdocs.com[MrDocs]#
