Public Member Functions | Static Public Member Functions | Public Attributes

Atomic< Type > Class Template Reference

Simple class to hold a primitive value and perform atomic operations on it. More...

List of all members.

Public Member Functions

 Atomic () noexcept
 Creates a new value, initialised to zero.
 Atomic (const Type initialValue) noexcept
 Creates a new value, with a given initial value.
 Atomic (const Atomic &other) noexcept
 Copies another value (atomically).
 ~Atomic () noexcept
 Destructor.
Type get () const noexcept
 Atomically reads and returns the current value.
Atomicoperator= (const Atomic &other) noexcept
 Copies another value onto this one (atomically).
Atomicoperator= (const Type newValue) noexcept
 Copies another value onto this one (atomically).
void set (Type newValue) noexcept
 Atomically sets the current value.
Type exchange (Type value) noexcept
 Atomically sets the current value, returning the value that was replaced.
Type operator+= (Type amountToAdd) noexcept
 Atomically adds a number to this value, returning the new value.
Type operator-= (Type amountToSubtract) noexcept
 Atomically subtracts a number from this value, returning the new value.
Type operator++ () noexcept
 Atomically increments this value, returning the new value.
Type operator-- () noexcept
 Atomically decrements this value, returning the new value.
bool compareAndSetBool (Type newValue, Type valueToCompare) noexcept
 Atomically compares this value with a target value, and if it is equal, sets this to be equal to a new value.
Type compareAndSetValue (Type newValue, Type valueToCompare) noexcept
 Atomically compares this value with a target value, and if it is equal, sets this to be equal to a new value.

Static Public Member Functions

static void memoryBarrier () noexcept
 Implements a memory read/write barrier.

Public Attributes

volatile Type value
 The raw value that this class operates on.

Detailed Description

template<typename Type>
class Atomic< Type >

Simple class to hold a primitive value and perform atomic operations on it.

The type used must be a 32 or 64 bit primitive, like an int, pointer, etc. There are methods to perform most of the basic atomic operations.


Constructor & Destructor Documentation

template<typename Type>
Atomic< Type >::Atomic (  )

Creates a new value, initialised to zero.

template<typename Type>
Atomic< Type >::Atomic ( const Type  initialValue )

Creates a new value, with a given initial value.

template<typename Type>
Atomic< Type >::Atomic ( const Atomic< Type > &  other )

Copies another value (atomically).

template<typename Type>
Atomic< Type >::~Atomic (  )

Destructor.


Member Function Documentation

template<typename Type >
Type Atomic< Type >::get (  ) const

Atomically reads and returns the current value.

References JUCE_MAC_ATOMICS_VOLATILE.

template<typename Type>
Atomic& Atomic< Type >::operator= ( const Atomic< Type > &  other )

Copies another value onto this one (atomically).

template<typename Type>
Atomic& Atomic< Type >::operator= ( const Type  newValue )

Copies another value onto this one (atomically).

template<typename Type>
void Atomic< Type >::set ( Type  newValue )

Atomically sets the current value.

template<typename Type>
Type Atomic< Type >::exchange ( Type  value )

Atomically sets the current value, returning the value that was replaced.

Referenced by Atomic< int >::operator=(), and Atomic< int >::set().

template<typename Type>
Type Atomic< Type >::operator+= ( Type  amountToAdd )

Atomically adds a number to this value, returning the new value.

References JUCE_MAC_ATOMICS_VOLATILE.

template<typename Type>
Type Atomic< Type >::operator-= ( Type  amountToSubtract )

Atomically subtracts a number from this value, returning the new value.

References juce_negate().

template<typename Type >
Type Atomic< Type >::operator++ (  )

Atomically increments this value, returning the new value.

References JUCE_MAC_ATOMICS_VOLATILE.

template<typename Type >
Type Atomic< Type >::operator-- (  )

Atomically decrements this value, returning the new value.

References JUCE_MAC_ATOMICS_VOLATILE.

template<typename Type>
bool Atomic< Type >::compareAndSetBool ( Type  newValue,
Type  valueToCompare 
)

Atomically compares this value with a target value, and if it is equal, sets this to be equal to a new value.

This operation is the atomic equivalent of doing this:

        bool compareAndSetBool (Type newValue, Type valueToCompare)
        {
            if (get() == valueToCompare)
            {
                set (newValue);
                return true;
            }

            return false;
        }
Returns:
true if the comparison was true and the value was replaced; false if the comparison failed and the value was left unchanged.
See also:
compareAndSetValue

References JUCE_MAC_ATOMICS_VOLATILE.

template<typename Type>
Type Atomic< Type >::compareAndSetValue ( Type  newValue,
Type  valueToCompare 
)

Atomically compares this value with a target value, and if it is equal, sets this to be equal to a new value.

This operation is the atomic equivalent of doing this:

        Type compareAndSetValue (Type newValue, Type valueToCompare)
        {
            Type oldValue = get();
            if (oldValue == valueToCompare)
                set (newValue);

            return oldValue;
        }
Returns:
the old value before it was changed.
See also:
compareAndSetBool
template<typename Type >
void Atomic< Type >::memoryBarrier (  ) [static]

Implements a memory read/write barrier.


Member Data Documentation

template<typename Type>
volatile Type Atomic< Type >::value

The raw value that this class operates on.

This is exposed publically in case you need to manipulate it directly for performance reasons.


The documentation for this class was generated from the following file:
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Defines