struct node
{
typedef T value_type; ///< Value type
+ typedef cds::details::marked_ptr<T, 1> marked_data_ptr; ///< marked pointer to the value
- atomics::atomic< node* > next; ///< pointer to next node in the list
- atomics::atomic< value_type* > data; ///< pointer to user data, \p nullptr if the node is free
+ atomics::atomic< node* > next; ///< pointer to next node in the list
+ atomics::atomic< marked_data_ptr > data; ///< pointer to user data, \p nullptr if the node is free
//@cond
node()
event_counter m_nInsertSuccess; ///< Number of success \p insert() operations
event_counter m_nInsertFailed; ///< Number of failed \p insert() operations
event_counter m_nInsertRetry; ///< Number of attempts to insert new item
+ event_counter m_nInsertReuse; ///< Number of reusing empty node when inserting
+ event_counter m_nInsertReuseFailed; ///< Number of failed attempsof reusing free node when inserting
event_counter m_nUpdateNew; ///< Number of new item inserted for \p update()
event_counter m_nUpdateExisting; ///< Number of existing item updates
event_counter m_nUpdateFailed; ///< Number of failed \p update() call
void onInsertSuccess() { ++m_nInsertSuccess; }
void onInsertFailed() { ++m_nInsertFailed; }
void onInsertRetry() { ++m_nInsertRetry; }
+ void onInsertReuse() { ++m_nInsertReuse; }
+ void onInsertReuseFailed() { ++m_nInsertReuseFailed; }
void onUpdateNew() { ++m_nUpdateNew; }
void onUpdateExisting() { ++m_nUpdateExisting; }
void onUpdateFailed() { ++m_nUpdateFailed; }
void onInsertSuccess() const {}
void onInsertFailed() const {}
void onInsertRetry() const {}
+ void onInsertReuse() const {}
+ void onInsertReuseFailed() const {}
void onUpdateNew() const {}
void onUpdateExisting() const {}
void onUpdateFailed() const {}
void onInsertSuccess() { m_stat.onInsertSuccess(); }
void onInsertFailed() { m_stat.onInsertFailed(); }
void onInsertRetry() { m_stat.onInsertRetry(); }
+ void onInsertReuse() { m_stat.onInsertReuse(); }
+ void onInsertReuseFailed() { m_stat.onInsertReuseFailed(); }
void onUpdateNew() { m_stat.onUpdateNew(); }
void onUpdateExisting() { m_stat.onUpdateExisting();}
void onUpdateFailed() { m_stat.onUpdateFailed(); }