The Gaudi Framework  v36r6 (b1ee9983)
Gaudi::Accumulators::Adder< Arithmetic, atomicity::full > Struct Template Reference

Adder specialization in the case of atomicity full. More...

#include </builds/gaudi/Gaudi/GaudiKernel/include/Gaudi/Accumulators.h>

Inheritance diagram for Gaudi::Accumulators::Adder< Arithmetic, atomicity::full >:
Collaboration diagram for Gaudi::Accumulators::Adder< Arithmetic, atomicity::full >:

Static Public Member Functions

static constexpr OutputType DefaultValue ()
 
static void merge (InternalType &a, Arithmetic b) noexcept
 
- Static Public Member Functions inherited from Gaudi::Accumulators::BaseValueHandler< Arithmetic, atomicity::full >
static constexpr OutputType getValue (const InternalType &v) noexcept
 
static Arithmetic exchange (InternalType &v, Arithmetic newv) noexcept
 

Additional Inherited Members

- Public Types inherited from Gaudi::Accumulators::BaseValueHandler< Arithmetic, atomicity::full >
using OutputType = Arithmetic
 
using InternalType = std::atomic< Arithmetic >
 

Detailed Description

template<typename Arithmetic>
struct Gaudi::Accumulators::Adder< Arithmetic, atomicity::full >

Adder specialization in the case of atomicity full.

Definition at line 339 of file Accumulators.h.

Member Function Documentation

◆ DefaultValue()

template<typename Arithmetic >
static constexpr OutputType Gaudi::Accumulators::Adder< Arithmetic, atomicity::full >::DefaultValue ( )
inlinestaticconstexpr

Definition at line 342 of file Accumulators.h.

342 { return Arithmetic{}; }

◆ merge()

template<typename Arithmetic >
static void Gaudi::Accumulators::Adder< Arithmetic, atomicity::full >::merge ( InternalType a,
Arithmetic  b 
)
inlinestaticnoexcept

Definition at line 343 of file Accumulators.h.

343  {
344  if ( DefaultValue() == b ) return; // avoid atomic operation if b is "0"
345  if constexpr ( has_fetch_add_v<InternalType> ) {
346  a.fetch_add( b, std::memory_order_relaxed );
347  } else {
349  while ( !a.compare_exchange_weak( current, current + b ) )
350  ;
351  }
352  };

The documentation for this struct was generated from the following file:
Gaudi::Accumulators::Adder< Arithmetic, atomicity::full >::DefaultValue
static constexpr OutputType DefaultValue()
Definition: Accumulators.h:342
Gaudi::Accumulators::BaseValueHandler< Arithmetic, atomicity::full >::getValue
static constexpr OutputType getValue(const InternalType &v) noexcept
Definition: Accumulators.h:311