perfc 0.11.0
Loading...
Searching...
No Matches
perfc::Counter< T, void, typename std::enable_if< std::is_integral< T >::value >::type > Class Template Reference

Integrals w/o timestamp Partial specialization for integral types T and without clock. More...

#include <perfc/counter.hpp>

Detailed Description

template<class T>
class perfc::Counter< T, void, typename std::enable_if< std::is_integral< T >::value >::type >

Integrals w/o timestamp Partial specialization for integral types T and without clock.

Represents a thread safe performance counter primitive of type T.

Note
This is the only Counter specialization that is completely lock-free on most architectures.

Satisfies AtomicCounter requirements.

Thread Safety
thread-safe – All operations are thread safe but not necessarily synchronized
Template Parameters
Tcounter value type. Type requirements:
  • std::is_integral<T>::value == true

Definition at line 140 of file counter.hpp.

Public Types

using ClockType = void
 
using TimePointType = void
 
using ValueType = T
 
using CounterType = std::atomic<T>
 

Public Member Functions

 Counter () noexcept
 Construct with value-initialized T (T())
 
 Counter (T value) noexcept
 Construct with initial value value.
 
 Counter (Counter const &)=delete
 
bool IsLockFree () const noexcept
 Query if operations are lock free.
 
void Store (T value, MemoryOrder order=MemoryOrder::Release) noexcept
 Stores provided value in counter.
 
Load (MemoryOrder order=MemoryOrder::Acquire) const noexcept
 Load value from counter.
 
FetchAdd (T value, MemoryOrder order=MemoryOrder::Release) noexcept
 Perform post-increment with current value and value.
 
FetchSub (T value, MemoryOrder order=MemoryOrder::Release) noexcept
 Load value from counter.
 
operator++ () noexcept
 Pre-increment operator using default memory order.
 
operator++ (int) noexcept
 Post-increment operator using default memory order.
 
operator-- () noexcept
 Pre-decrement operator using default memory order.
 
operator-- (int) noexcept
 Post-decrement operator using default memory order.
 
operator+= (T value) noexcept
 Performs addition (equivalent to FetchAdd(value) + value
 
operator-= (T value) noexcept
 Performs subtraction (equivalent to FetchSub(value) - value
 

Static Public Attributes

static constexpr bool IS_ALWAYS_LOCK_FREE = CounterType::is_always_lock_free
 Is true if counter is always lock free.
 

Related Symbols

(Note that these are not member symbols.)

enum  MemoryOrder
 Memory ordering constraints. More...
 

Member Typedef Documentation

◆ ClockType

template<class T>
using perfc::Counter< T, void, typename std::enable_if< std::is_integral< T >::value >::type >::ClockType = void

Definition at line 142 of file counter.hpp.

◆ CounterType

template<class T>
using perfc::Counter< T, void, typename std::enable_if< std::is_integral< T >::value >::type >::CounterType = std::atomic<T>

Definition at line 145 of file counter.hpp.

◆ TimePointType

template<class T>
using perfc::Counter< T, void, typename std::enable_if< std::is_integral< T >::value >::type >::TimePointType = void

Definition at line 143 of file counter.hpp.

◆ ValueType

template<class T>
using perfc::Counter< T, void, typename std::enable_if< std::is_integral< T >::value >::type >::ValueType = T

Definition at line 144 of file counter.hpp.

Constructor & Destructor Documentation

◆ Counter() [1/3]

template<class T>
perfc::Counter< T, void, typename std::enable_if< std::is_integral< T >::value >::type >::Counter ( )
inlineexplicitnoexcept

Construct with value-initialized T (T())

Definition at line 155 of file counter.hpp.

◆ Counter() [2/3]

template<class T>
perfc::Counter< T, void, typename std::enable_if< std::is_integral< T >::value >::type >::Counter ( T value)
inlineexplicitnoexcept

Construct with initial value value.

Parameters
valueInitial value.

Definition at line 163 of file counter.hpp.

◆ Counter() [3/3]

template<class T>
perfc::Counter< T, void, typename std::enable_if< std::is_integral< T >::value >::type >::Counter ( Counter< T, void, typename std::enable_if< std::is_integral< T >::value >::type > const & )
delete

Member Function Documentation

◆ FetchAdd()

template<class T>
T perfc::Counter< T, void, typename std::enable_if< std::is_integral< T >::value >::type >::FetchAdd ( T value,
MemoryOrder order = MemoryOrder::Release )
inlinenoexcept

Perform post-increment with current value and value.

Parameters
valuevalue to add.
orderMemory order constraints.
Returns
Counter value immediately preceding the addition of value.

Definition at line 203 of file counter.hpp.

◆ FetchSub()

template<class T>
T perfc::Counter< T, void, typename std::enable_if< std::is_integral< T >::value >::type >::FetchSub ( T value,
MemoryOrder order = MemoryOrder::Release )
inlinenoexcept

Load value from counter.

Parameters
valuevalue to subtract.
orderMemory order constraints.
Returns
Counter value immediately preceding the addition of value.
Counter value.

Definition at line 215 of file counter.hpp.

◆ IsLockFree()

template<class T>
bool perfc::Counter< T, void, typename std::enable_if< std::is_integral< T >::value >::type >::IsLockFree ( ) const
inlinenoexcept

Query if operations are lock free.

Returns
true if operations are lock free.
false otherwise.

Definition at line 172 of file counter.hpp.

◆ Load()

template<class T>
T perfc::Counter< T, void, typename std::enable_if< std::is_integral< T >::value >::type >::Load ( MemoryOrder order = MemoryOrder::Acquire) const
inlinenodiscardnoexcept

Load value from counter.

Parameters
orderMemory order constraints.
Returns
Counter value.

Definition at line 192 of file counter.hpp.

◆ operator++() [1/2]

template<class T>
T perfc::Counter< T, void, typename std::enable_if< std::is_integral< T >::value >::type >::operator++ ( )
inlinenoexcept

Pre-increment operator using default memory order.

Definition at line 222 of file counter.hpp.

◆ operator++() [2/2]

template<class T>
T perfc::Counter< T, void, typename std::enable_if< std::is_integral< T >::value >::type >::operator++ ( int )
inlinenoexcept

Post-increment operator using default memory order.

Returns
Counter value before incrementation.

Definition at line 231 of file counter.hpp.

◆ operator+=()

template<class T>
T perfc::Counter< T, void, typename std::enable_if< std::is_integral< T >::value >::type >::operator+= ( T value)
inlinenoexcept

Performs addition (equivalent to FetchAdd(value) + value

Parameters
valuevalue to add.
Returns
Result of arithmetic operation.

Definition at line 257 of file counter.hpp.

◆ operator--() [1/2]

template<class T>
T perfc::Counter< T, void, typename std::enable_if< std::is_integral< T >::value >::type >::operator-- ( )
inlinenoexcept

Pre-decrement operator using default memory order.

Definition at line 238 of file counter.hpp.

◆ operator--() [2/2]

template<class T>
T perfc::Counter< T, void, typename std::enable_if< std::is_integral< T >::value >::type >::operator-- ( int )
inlinenoexcept

Post-decrement operator using default memory order.

Returns
Counter value before decrementation.

Definition at line 247 of file counter.hpp.

◆ operator-=()

template<class T>
T perfc::Counter< T, void, typename std::enable_if< std::is_integral< T >::value >::type >::operator-= ( T value)
inlinenoexcept

Performs subtraction (equivalent to FetchSub(value) - value

Parameters
valuevalue to subtract.
Returns
Result of arithmetic operation.

Definition at line 267 of file counter.hpp.

◆ Store()

template<class T>
void perfc::Counter< T, void, typename std::enable_if< std::is_integral< T >::value >::type >::Store ( T value,
MemoryOrder order = MemoryOrder::Release )
inlinenoexcept

Stores provided value in counter.

Parameters
valueCounter value to store.
orderMemory order constraints.

Definition at line 182 of file counter.hpp.

Friends And Related Symbol Documentation

◆ MemoryOrder

enum MemoryOrder : std::underlying_type_t< std::memory_order >
related

Memory ordering constraints.

Definition at line 81 of file counter.hpp.

Member Data Documentation

◆ IS_ALWAYS_LOCK_FREE

template<class T>
bool perfc::Counter< T, void, typename std::enable_if< std::is_integral< T >::value >::type >::IS_ALWAYS_LOCK_FREE = CounterType::is_always_lock_free
staticconstexpr

Is true if counter is always lock free.

Definition at line 150 of file counter.hpp.


The documentation for this class was generated from the following file: