cds  2.3.2
cds::intrusive::FCStack< T, Container, Traits > Class Template Reference

Flat-combining intrusive stack. More...

#include <cds/intrusive/fcstack.h>

Public Types

typedef T value_type
 Value type.
 
typedef Container container_type
 Sequential container type.
 
typedef Traits traits
 Stack traits.
 
typedef traits::disposer disposer
 The disposer functor. The disposer is used only in clear() function.
 
typedef traits::stat stat
 Internal statistics type.
 

Public Member Functions

 FCStack ()
 Initializes empty stack object.
 
 FCStack (unsigned int nCompactFactor, unsigned int nCombinePassCount)
 Initializes empty stack object and gives flat combining parameters. More...
 
bool push (value_type &val)
 Inserts a new element at the top of stack. More...
 
value_typepop ()
 Removes the element on top of the stack.
 
void clear (bool bDispose=false)
 Clears the stack. More...
 
template<typename Func >
void apply (Func f)
 Exclusive access to underlying stack object. More...
 
template<typename Func >
void apply (Func f) const
 Exclusive access to underlying stack object. More...
 
size_t size () const
 Returns the number of elements in the stack. More...
 
bool empty () const
 Checks if the stack is empty. More...
 
stat const & statistics () const
 Internal statistics.
 

Static Public Attributes

static constexpr const bool c_bEliminationEnabled = traits::enable_elimination
 true if elimination is enabled
 

Protected Types

typedef cds::algo::flat_combining::kernel< fc_record, traitsfc_kernel
 Flat combining kernel.
 

Detailed Description

template<typename T, class Container = boost::intrusive::slist<T>, typename Traits = fcstack::traits>
class cds::intrusive::FCStack< T, Container, Traits >

Flat-combining intrusive stack.

Flat combining sequential intrusive stack.

Template parameters:

  • T - a value type stored in the stack
  • Container - sequential intrusive container with push_front and pop_front functions. Possible containers are boost::intrusive::slist (the default), boost::inrtrusive::list
  • Traits - type traits of flat combining, default is fcstack::traits. fcstack::make_traits metafunction can be used to construct specialized traits

Constructor & Destructor Documentation

◆ FCStack()

template<typename T , class Container = boost::intrusive::slist<T>, typename Traits = fcstack::traits>
cds::intrusive::FCStack< T, Container, Traits >::FCStack ( unsigned int  nCompactFactor,
unsigned int  nCombinePassCount 
)
inline

Initializes empty stack object and gives flat combining parameters.

Parameters
nCompactFactorFlat combining: publication list compacting factor
nCombinePassCountFlat combining: number of combining passes for combiner thread

Member Function Documentation

◆ apply() [1/2]

template<typename T , class Container = boost::intrusive::slist<T>, typename Traits = fcstack::traits>
template<typename Func >
void cds::intrusive::FCStack< T, Container, Traits >::apply ( Func  f)
inline

Exclusive access to underlying stack object.

The functor f can do any operation with underlying container_type in exclusive mode. For example, you can iterate over the stack. Func signature is:

void f( container_type& stack );

◆ apply() [2/2]

template<typename T , class Container = boost::intrusive::slist<T>, typename Traits = fcstack::traits>
template<typename Func >
void cds::intrusive::FCStack< T, Container, Traits >::apply ( Func  f) const
inline

Exclusive access to underlying stack object.

The functor f can do any operation with underlying container_type in exclusive mode. For example, you can iterate over the stack. Func signature is:

void f( container_type const& stack );

◆ clear()

template<typename T , class Container = boost::intrusive::slist<T>, typename Traits = fcstack::traits>
void cds::intrusive::FCStack< T, Container, Traits >::clear ( bool  bDispose = false)
inline

Clears the stack.

If bDispose is true, the disposer provided in Traits class' template parameter will be called for each removed element.

◆ empty()

template<typename T , class Container = boost::intrusive::slist<T>, typename Traits = fcstack::traits>
bool cds::intrusive::FCStack< T, Container, Traits >::empty ( ) const
inline

Checks if the stack is empty.

If the combining is in process the function waits while it is done.

◆ push()

template<typename T , class Container = boost::intrusive::slist<T>, typename Traits = fcstack::traits>
bool cds::intrusive::FCStack< T, Container, Traits >::push ( value_type val)
inline

Inserts a new element at the top of stack.

The content of the new element initialized to a copy of val.

◆ size()

template<typename T , class Container = boost::intrusive::slist<T>, typename Traits = fcstack::traits>
size_t cds::intrusive::FCStack< T, Container, Traits >::size ( ) const
inline

Returns the number of elements in the stack.

Note that size() == 0 is not mean that the stack is empty because combining record can be in process. To check emptiness use empty function.


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

cds 2.3.2 Developed by Maxim Khizhinsky aka khizmax and other contributors 2007 - 2017
Autogenerated Sun Dec 31 2017 12:10:36 by Doxygen 1.8.13