namespace istack {
namespace details {
- template <typename GC, typename T, CDS_DECL_OPTIONS10>
- class MichaelDequeL: public cds::intrusive::MichaelDeque< GC, T, CDS_OPTIONS10>
- {
- typedef cds::intrusive::MichaelDeque< GC, T, CDS_OPTIONS10> base_class;
- public:
- MichaelDequeL( size_t nMaxItemCount )
- : base_class( (unsigned int) nMaxItemCount, 4 )
- {}
-
- bool push( T& v )
- {
- return base_class::push_front( v );
- }
-
- T * pop()
- {
- return base_class::pop_front();
- }
- };
-
- template <typename GC, typename T, CDS_DECL_OPTIONS10>
- class MichaelDequeR: public cds::intrusive::MichaelDeque< GC, T, CDS_OPTIONS10>
- {
- typedef cds::intrusive::MichaelDeque< GC, T, CDS_OPTIONS10> base_class;
- public:
- MichaelDequeR( size_t nMaxItemCount )
- : base_class( (unsigned int) nMaxItemCount, 4 )
- {}
-
- bool push( T& v )
- {
- return base_class::push_back( v );
- }
-
- T * pop()
- {
- return base_class::pop_back();
- }
- };
template < typename T, typename Stack, typename Lock>
class StdStack
typedef cds::intrusive::FCStack< T, boost::intrusive::list< T >, traits_FCStack_mutex_elimination > FCStack_list_mutex_elimination;
typedef cds::intrusive::FCStack< T, boost::intrusive::list< T >, traits_FCStack_mutex_elimination_stat > FCStack_list_mutex_elimination_stat;
- // MichaelDeque, left side
- typedef details::MichaelDequeL< cds::gc::HP, T
- ,cds::intrusive::opt::hook< cds::intrusive::michael_deque::base_hook< cds::opt::gc< cds::gc::HP > > >
- > MichaelDequeL_HP;
- typedef details::MichaelDequeL< cds::gc::HP, T
- ,cds::intrusive::opt::hook< cds::intrusive::michael_deque::base_hook< cds::opt::gc< cds::gc::HP > > >
- ,cds::opt::memory_model<cds::opt::v::sequential_consistent>
- > MichaelDequeL_HP_seqcst;
-
- typedef details::MichaelDequeL< cds::gc::HP, T
- ,cds::intrusive::opt::hook< cds::intrusive::michael_deque::base_hook< cds::opt::gc< cds::gc::HP > > >
- ,cds::opt::item_counter< cds::atomicity::item_counter >
- > MichaelDequeL_HP_ic;
-
- typedef details::MichaelDequeL< cds::gc::HP, T
- ,cds::intrusive::opt::hook< cds::intrusive::michael_deque::base_hook< cds::opt::gc< cds::gc::HP > > >
- ,cds::opt::back_off<
- cds::backoff::exponential<
- cds::backoff::pause,
- cds::backoff::yield
- >
- >
- > MichaelDequeL_HP_exp;
-
- typedef details::MichaelDequeL< cds::gc::HP, T
- ,cds::intrusive::opt::hook< cds::intrusive::michael_deque::base_hook< cds::opt::gc< cds::gc::HP > > >
- ,cds::intrusive::opt::hook< cds::intrusive::michael_deque::base_hook< cds::opt::gc< cds::gc::HP > > >
- ,cds::opt::back_off< cds::backoff::yield >
- > MichaelDequeL_HP_yield;
-
- typedef details::MichaelDequeL< cds::gc::HP, T
- ,cds::intrusive::opt::hook< cds::intrusive::michael_deque::base_hook< cds::opt::gc< cds::gc::HP > > >
- ,cds::opt::stat<cds::intrusive::deque_stat<> >
- > MichaelDequeL_HP_stat;
-
-
- typedef details::MichaelDequeL< cds::gc::PTB, T
- ,cds::intrusive::opt::hook< cds::intrusive::michael_deque::base_hook< cds::opt::gc< cds::gc::PTB > > >
- > MichaelDequeL_PTB;
- typedef details::MichaelDequeL< cds::gc::PTB, T
- ,cds::intrusive::opt::hook< cds::intrusive::michael_deque::base_hook< cds::opt::gc< cds::gc::PTB > > >
- ,cds::opt::memory_model<cds::opt::v::sequential_consistent>
- > MichaelDequeL_PTB_seqcst;
-
- typedef details::MichaelDequeL< cds::gc::PTB, T
- ,cds::intrusive::opt::hook< cds::intrusive::michael_deque::base_hook< cds::opt::gc< cds::gc::PTB > > >
- ,cds::opt::item_counter< cds::atomicity::item_counter >
- > MichaelDequeL_PTB_ic;
-
- typedef details::MichaelDequeL< cds::gc::PTB, T
- ,cds::intrusive::opt::hook< cds::intrusive::michael_deque::base_hook< cds::opt::gc< cds::gc::PTB > > >
- ,cds::opt::back_off<
- cds::backoff::exponential<
- cds::backoff::pause,
- cds::backoff::yield
- >
- >
- > MichaelDequeL_PTB_exp;
-
- typedef details::MichaelDequeL< cds::gc::PTB, T
- ,cds::intrusive::opt::hook< cds::intrusive::michael_deque::base_hook< cds::opt::gc< cds::gc::PTB > > >
- ,cds::opt::back_off< cds::backoff::yield >
- > MichaelDequeL_PTB_yield;
-
- typedef details::MichaelDequeL< cds::gc::PTB, T
- ,cds::intrusive::opt::hook< cds::intrusive::michael_deque::base_hook< cds::opt::gc< cds::gc::PTB > > >
- ,cds::opt::stat<cds::intrusive::michael_deque::stat<> >
- > MichaelDequeL_PTB_stat;
-
-
- // MichaelDeque, right side
- typedef details::MichaelDequeR< cds::gc::HP, T
- ,cds::intrusive::opt::hook< cds::intrusive::michael_deque::base_hook< cds::opt::gc< cds::gc::HP > > >
- > MichaelDequeR_HP;
- typedef details::MichaelDequeR< cds::gc::HP, T
- ,cds::intrusive::opt::hook< cds::intrusive::michael_deque::base_hook< cds::opt::gc< cds::gc::HP > > >
- ,cds::opt::memory_model<cds::opt::v::sequential_consistent>
- > MichaelDequeR_HP_seqcst;
-
- typedef details::MichaelDequeR< cds::gc::HP, T
- ,cds::intrusive::opt::hook< cds::intrusive::michael_deque::base_hook< cds::opt::gc< cds::gc::HP > > >
- ,cds::opt::item_counter< cds::atomicity::item_counter >
- > MichaelDequeR_HP_ic;
-
- typedef details::MichaelDequeR< cds::gc::HP, T
- ,cds::intrusive::opt::hook< cds::intrusive::michael_deque::base_hook< cds::opt::gc< cds::gc::HP > > >
- ,cds::opt::back_off<
- cds::backoff::exponential<
- cds::backoff::pause,
- cds::backoff::yield
- >
- >
- > MichaelDequeR_HP_exp;
-
- typedef details::MichaelDequeR< cds::gc::HP, T
- ,cds::intrusive::opt::hook< cds::intrusive::michael_deque::base_hook< cds::opt::gc< cds::gc::HP > > >
- ,cds::opt::back_off< cds::backoff::yield >
- > MichaelDequeR_HP_yield;
-
- typedef details::MichaelDequeR< cds::gc::HP, T
- ,cds::opt::stat< cds::intrusive::michael_deque::stat<> >
- > MichaelDequeR_HP_stat;
-
- typedef details::MichaelDequeR< cds::gc::PTB, T
- ,cds::intrusive::opt::hook< cds::intrusive::michael_deque::base_hook< cds::opt::gc< cds::gc::PTB > > >
- > MichaelDequeR_PTB;
- typedef details::MichaelDequeR< cds::gc::PTB, T
- ,cds::intrusive::opt::hook< cds::intrusive::michael_deque::base_hook< cds::opt::gc< cds::gc::PTB > > >
- ,cds::opt::memory_model<cds::opt::v::sequential_consistent>
- > MichaelDequeR_PTB_seqcst;
-
- typedef details::MichaelDequeR< cds::gc::PTB, T
- ,cds::intrusive::opt::hook< cds::intrusive::michael_deque::base_hook< cds::opt::gc< cds::gc::PTB > > >
- ,cds::opt::item_counter< cds::atomicity::item_counter >
- > MichaelDequeR_PTB_ic;
-
- typedef details::MichaelDequeR< cds::gc::PTB, T
- ,cds::intrusive::opt::hook< cds::intrusive::michael_deque::base_hook< cds::opt::gc< cds::gc::PTB > > >
- ,cds::opt::back_off<
- cds::backoff::exponential<
- cds::backoff::pause,
- cds::backoff::yield
- >
- >
- > MichaelDequeR_PTB_exp;
-
- typedef details::MichaelDequeR< cds::gc::PTB, T
- ,cds::intrusive::opt::hook< cds::intrusive::michael_deque::base_hook< cds::opt::gc< cds::gc::PTB > > >
- ,cds::opt::stat< cds::intrusive::deque_stat<> >
- > MichaelDequeR_PTB_stat;
-
- typedef details::MichaelDequeR< cds::gc::PTB, T
- ,cds::intrusive::opt::hook< cds::intrusive::michael_deque::base_hook< cds::opt::gc< cds::gc::PTB > > >
- ,cds::opt::back_off< cds::backoff::yield >
- > MichaelDequeR_PTB_yield;
-
// std::stack
typedef details::StdStack< T, std::stack< T* >, std::mutex > StdStack_Deque_Mutex;
namespace stack {
namespace details {
- template <typename GC, typename T, CDS_DECL_OPTIONS7>
- class MichaelDequeL: public cds::container::MichaelDeque< GC, T, CDS_OPTIONS7>
- {
- typedef cds::container::MichaelDeque< GC, T, CDS_OPTIONS7> base_class;
- public:
- MichaelDequeL( size_t nMaxItemCount )
- : base_class( (unsigned int) nMaxItemCount, 4 )
- {}
-
- bool push( T const& v )
- {
- return base_class::push_front( v );
- }
-
- bool pop( T& v )
- {
- return base_class::pop_front( v );
- }
- };
-
- template <typename GC, typename T, CDS_DECL_OPTIONS7>
- class MichaelDequeR: public cds::container::MichaelDeque< GC, T, CDS_OPTIONS7>
- {
- typedef cds::container::MichaelDeque< GC, T, CDS_OPTIONS7> base_class;
- public:
- MichaelDequeR( size_t nMaxItemCount )
- : base_class( (unsigned int) nMaxItemCount, 4 )
- {}
-
- bool push( T const& v )
- {
- return base_class::push_back( v );
- }
-
- bool pop( T& v )
- {
- return base_class::pop_back( v );
- }
- };
template <typename T, typename Traits=cds::container::fcdeque::type_traits>
class FCDequeL: public cds::container::FCDeque<T, std::deque<T>, Traits >
typedef details::FCDequeR< T, traits_FCDeque_elimination > FCDequeR_elimination;
typedef details::FCDequeR< T, traits_FCDeque_elimination_stat > FCDequeR_elimination_stat;
- // MichaelDeque, left side
- typedef details::MichaelDequeL< cds::gc::HP, T> MichaelDequeL_HP;
- typedef details::MichaelDequeL< cds::gc::HP, T
- ,cds::opt::memory_model<cds::opt::v::sequential_consistent>
- > MichaelDequeL_HP_seqcst;
-
- typedef details::MichaelDequeL< cds::gc::HP, T
- ,cds::opt::item_counter< cds::atomicity::item_counter >
- > MichaelDequeL_HP_ic;
-
- typedef details::MichaelDequeL< cds::gc::HP, T
- ,cds::opt::back_off<
- cds::backoff::exponential<
- cds::backoff::pause,
- cds::backoff::yield
- >
- >
- > MichaelDequeL_HP_exp;
-
- typedef details::MichaelDequeL< cds::gc::HP, T
- ,cds::opt::back_off< cds::backoff::yield >
- > MichaelDequeL_HP_yield;
-
- typedef details::MichaelDequeL< cds::gc::HP, T
- ,cds::opt::stat<cds::intrusive::deque_stat<> >
- > MichaelDequeL_HP_stat;
-
-
- typedef details::MichaelDequeL< cds::gc::PTB, T> MichaelDequeL_PTB;
- typedef details::MichaelDequeL< cds::gc::PTB, T
- ,cds::opt::memory_model<cds::opt::v::sequential_consistent>
- > MichaelDequeL_PTB_seqcst;
-
- typedef details::MichaelDequeL< cds::gc::PTB, T
- ,cds::opt::item_counter< cds::atomicity::item_counter >
- > MichaelDequeL_PTB_ic;
-
- typedef details::MichaelDequeL< cds::gc::PTB, T
- ,cds::opt::back_off<
- cds::backoff::exponential<
- cds::backoff::pause,
- cds::backoff::yield
- >
- >
- > MichaelDequeL_PTB_exp;
-
- typedef details::MichaelDequeL< cds::gc::PTB, T
- ,cds::opt::back_off< cds::backoff::yield >
- > MichaelDequeL_PTB_yield;
-
- typedef details::MichaelDequeL< cds::gc::PTB, T
- ,cds::opt::stat<cds::intrusive::michael_deque::stat<> >
- > MichaelDequeL_PTB_stat;
-
-
- // MichaelDeque, right side
- typedef details::MichaelDequeR< cds::gc::HP, T> MichaelDequeR_HP;
- typedef details::MichaelDequeR< cds::gc::HP, T
- ,cds::opt::memory_model<cds::opt::v::sequential_consistent>
- > MichaelDequeR_HP_seqcst;
-
- typedef details::MichaelDequeR< cds::gc::HP, T
- ,cds::opt::item_counter< cds::atomicity::item_counter >
- > MichaelDequeR_HP_ic;
-
- typedef details::MichaelDequeR< cds::gc::HP, T
- ,cds::opt::back_off<
- cds::backoff::exponential<
- cds::backoff::pause,
- cds::backoff::yield
- >
- >
- > MichaelDequeR_HP_exp;
-
- typedef details::MichaelDequeR< cds::gc::HP, T
- ,cds::opt::back_off< cds::backoff::yield >
- > MichaelDequeR_HP_yield;
-
- typedef details::MichaelDequeR< cds::gc::HP, T
- ,cds::opt::stat< cds::intrusive::michael_deque::stat<> >
- > MichaelDequeR_HP_stat;
-
- typedef details::MichaelDequeR< cds::gc::PTB, T> MichaelDequeR_PTB;
- typedef details::MichaelDequeR< cds::gc::PTB, T
- ,cds::opt::memory_model<cds::opt::v::sequential_consistent>
- > MichaelDequeR_PTB_seqcst;
-
- typedef details::MichaelDequeR< cds::gc::PTB, T
- ,cds::opt::item_counter< cds::atomicity::item_counter >
- > MichaelDequeR_PTB_ic;
-
- typedef details::MichaelDequeR< cds::gc::PTB, T
- ,cds::opt::back_off<
- cds::backoff::exponential<
- cds::backoff::pause,
- cds::backoff::yield
- >
- >
- > MichaelDequeR_PTB_exp;
-
- typedef details::MichaelDequeR< cds::gc::PTB, T
- ,cds::opt::stat< cds::intrusive::deque_stat<> >
- > MichaelDequeR_PTB_stat;
-
- typedef details::MichaelDequeR< cds::gc::PTB, T
- ,cds::opt::back_off< cds::backoff::yield >
- > MichaelDequeR_PTB_yield;
-
// std::stack
typedef details::StdStack< T, std::stack< T >, std::mutex > StdStack_Deque_Mutex;