#ifndef __CDS_INTRUSIVE_VYUKOV_MPMC_CYCLE_QUEUE_H
#define __CDS_INTRUSIVE_VYUKOV_MPMC_CYCLE_QUEUE_H
-#include <cds/intrusive/base.h>
+#include <cds/intrusive/details/base.h>
#include <cds/container/vyukov_mpmc_cycle_queue.h>
namespace cds { namespace intrusive {
\endcode
*/
- template <typename T, CDS_DECL_OPTIONS6>
+ template <typename T, typename... Options>
class VyukovMPMCCycleQueue
- : private container::VyukovMPMCCycleQueue< T *, CDS_OPTIONS6 >
+ : private container::VyukovMPMCCycleQueue< T *, Options... >
{
//@cond
- typedef container::VyukovMPMCCycleQueue< T *, CDS_OPTIONS6 > base_class;
+ typedef container::VyukovMPMCCycleQueue< T *, Options... > base_class;
//@endcond
public:
typedef T value_type ; ///< type of data stored in the queue
public:
/// Rebind template arguments
- template <typename T2, CDS_DECL_OTHER_OPTIONS6>
+ template <typename T2, typename... Options2>
struct rebind {
- typedef VyukovMPMCCycleQueue< T2, CDS_OTHER_OPTIONS6> other ; ///< Rebinding result
+ typedef VyukovMPMCCycleQueue< T2, Options2...> other ; ///< Rebinding result
};
public:
/// Dequeues an item from queue
/**
- If queue is empty, returns \p NULL.
+ If queue is empty, returns \p nullptr.
*/
value_type * dequeue()
{
- value_type * p = null_ptr<value_type *>();
- return base_class::dequeue( p ) ? p : null_ptr<value_type *>();
+ value_type * p = nullptr;
+ return base_class::dequeue( p ) ? p : nullptr;
}
/// Synonym of \ref enqueue
void operator ()( T * val );
};
\endcode
- You can pass \p disposer by reference using \p boost::ref.
+ You can pass \p disposer by reference using \p std::ref.
The disposer will be called immediately for each item.
*/
template <typename Disposer>
void clear( Disposer f )
{
value_type * pv;
- while ( (pv = pop()) != null_ptr<value_type *>() ) {
- unref(f)( pv );
+ while ( (pv = pop()) != nullptr ) {
+ f( pv );
}
}