Zero  0.1.0
Classes | Namespaces | Macros | Typedefs | Enumerations | Functions
AtomicCounter.hpp File Reference

Header file for lintel::Atomic class. More...

Go to the source code of this file.

Classes

class  lintel::Atomic< T >
 An atomic counter that avoids using locks. More...
 

Namespaces

 lintel
 
 lintel::unsafe
 

Macros

#define LINTEL_USE_GCC_ASM_ATOMICS   1
 
#define LINTEL_ATOMIC_FETCH(op, var, amount)   lintel::x86Gcc_atomic_fetch_##op(var, amount)
 
#define LINTEL_ATOMIC_LOAD(ptr)   lintel::x86Gcc_atomic_load(ptr)
 
#define LINTEL_ATOMIC_STORE(ptr, val)   lintel::x86Gcc_atomic_store(ptr, val)
 
#define LINTEL_ATOMIC_EXCHANGE(ptr, val)   lintel::x86Gcc_atomic_exchange(ptr, val)
 
#define LINTEL_COMPARE_EXCHANGE(current, expected, desired)   lintel::x86Gcc_compare_exchange(current, expected, desired)
 
#define LINTEL_ATOMIC_THREAD_FENCE(order)   lintel::x86Gcc_atomic_thread_fence(order)
 

Typedefs

typedef enum lintel::memory_order lintel::memory_order
 Enumeration for memory_order. More...
 
typedef Atomic< int > lintel::AtomicCounter
 

Enumerations

enum  lintel::memory_order {
  lintel::memory_order_relaxed, lintel::memory_order_consume, lintel::memory_order_acquire, lintel::memory_order_release,
  lintel::memory_order_acq_rel, lintel::memory_order_seq_cst
}
 Enumeration for memory_order. More...
 

Functions

template<typename T >
static T lintel::x86Gcc_atomic_load (const T *counter)
 
template<typename T >
static void lintel::x86Gcc_atomic_store (T *counter, T v)
 
template<typename T >
static T lintel::x86Gcc_atomic_exchange (T *counter, T v)
 
template<typename T >
static bool lintel::x86Gcc_compare_exchange (T *current, T *expected, T desired)
 
template<typename T >
static T lintel::x86Gcc_atomic_fetch_add (T *counter, T v)
 
template<typename T >
static T lintel::x86Gcc_atomic_fetch_sub (T *counter, T v)
 
template<typename T >
static T lintel::x86Gcc_atomic_fetch_or (T *counter, T v)
 
template<typename T >
static T lintel::x86Gcc_atomic_fetch_and (T *counter, T v)
 
template<typename T >
static T lintel::x86Gcc_atomic_fetch_xor (T *counter, T v)
 
static void lintel::x86Gcc_atomic_thread_fence (memory_order order)
 
void lintel::atomic_thread_fence (memory_order order)
 
void lintel::atomic_signal_fence (memory_order)
 
template<typename T >
T lintel::unsafe::atomic_load (const T *object)
 
template<typename T , typename C >
void lintel::unsafe::atomic_store (T *object, C desired)
 
template<typename T , typename C >
T lintel::unsafe::atomic_exchange (T *object, C desired)
 
template<typename T , typename C >
bool lintel::unsafe::atomic_compare_exchange_strong (T *object, T *expected, C desired)
 
template<typename T , typename C >
T lintel::unsafe::atomic_fetch_add (T *object, C operand)
 
template<typename T , typename C >
T lintel::unsafe::atomic_fetch_sub (T *object, C operand)
 
template<typename T , typename C >
T lintel::unsafe::atomic_fetch_or (T *object, C operand)
 
template<typename T , typename C >
T lintel::unsafe::atomic_fetch_and (T *object, C operand)
 
template<typename T , typename C >
T lintel::unsafe::atomic_fetch_xor (T *object, C operand)
 

Detailed Description

Header file for lintel::Atomic class.

Macro Definition Documentation

§ LINTEL_ATOMIC_EXCHANGE

#define LINTEL_ATOMIC_EXCHANGE (   ptr,
  val 
)    lintel::x86Gcc_atomic_exchange(ptr, val)

§ LINTEL_ATOMIC_FETCH

#define LINTEL_ATOMIC_FETCH (   op,
  var,
  amount 
)    lintel::x86Gcc_atomic_fetch_##op(var, amount)

§ LINTEL_ATOMIC_LOAD

#define LINTEL_ATOMIC_LOAD (   ptr)    lintel::x86Gcc_atomic_load(ptr)

§ LINTEL_ATOMIC_STORE

#define LINTEL_ATOMIC_STORE (   ptr,
  val 
)    lintel::x86Gcc_atomic_store(ptr, val)

§ LINTEL_ATOMIC_THREAD_FENCE

#define LINTEL_ATOMIC_THREAD_FENCE (   order)    lintel::x86Gcc_atomic_thread_fence(order)

§ LINTEL_COMPARE_EXCHANGE

#define LINTEL_COMPARE_EXCHANGE (   current,
  expected,
  desired 
)    lintel::x86Gcc_compare_exchange(current, expected, desired)

§ LINTEL_USE_GCC_ASM_ATOMICS

#define LINTEL_USE_GCC_ASM_ATOMICS   1