X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=cds%2Fcontainer%2Fmichael_set.h;h=85ffc5378ee42b8d34311d6307c0873b78910641;hb=df4d0c52b3eff17a49505093870a37ea8c9d565d;hp=cdd383f4694d1831f40945a5288fb903632a3036;hpb=65f7355b1eaa63b1a46d2172d10d45e400e6d862;p=libcds.git diff --git a/cds/container/michael_set.h b/cds/container/michael_set.h index cdd383f4..85ffc537 100644 --- a/cds/container/michael_set.h +++ b/cds/container/michael_set.h @@ -188,10 +188,6 @@ namespace cds { namespace container { // GC and OrderedList::gc must be the same static_assert( std::is_same::value, "GC and OrderedList::gc must be the same"); - // atomicity::empty_item_counter is not allowed as a item counter - static_assert( !std::is_same::value, - "cds::atomicity::empty_item_counter is not allowed as a item counter"); - //@cond typedef typename ordered_list::template select_stat_wrapper< typename ordered_list::stat > bucket_stat; @@ -213,8 +209,8 @@ namespace cds { namespace container { //@cond size_t const m_nHashBitmask; internal_bucket_type * m_Buckets; ///< bucket table - item_counter m_ItemCounter; ///< Item counter hash m_HashFunctor; ///< Hash functor + item_counter m_ItemCounter; ///< Item counter stat m_Stat; ///< Internal statistics //@endcond @@ -588,7 +584,7 @@ namespace cds { namespace container { erase_at( Iterator const& iter ) #endif { - assert( iter != end() ); + assert( iter != end()); assert( iter.bucket() != nullptr ); if ( iter.bucket()->erase_at( iter.underlying_iterator())) { @@ -868,8 +864,8 @@ namespace cds { namespace container { /// Checks if the set is empty /** - Emptiness is checked by item counting: if item count is zero then the set is empty. - Thus, the correct item counting feature is an important part of Michael's set implementation. + @warning If you use \p atomicity::empty_item_counter in \p traits::item_counter, + the function always returns \p true. */ bool empty() const { @@ -877,6 +873,10 @@ namespace cds { namespace container { } /// Returns item count in the set + /** + @warning If you use \p atomicity::empty_item_counter in \p traits::item_counter, + the function always returns 0. + */ size_t size() const { return m_ItemCounter; @@ -943,15 +943,15 @@ namespace cds { namespace container { } template - typename std::enable_if< Stat::empty >::type construct_bucket( internal_bucket_type* bucket ) + typename std::enable_if< Stat::empty >::type construct_bucket( internal_bucket_type* b ) { - new (bucket) internal_bucket_type; + new (b) internal_bucket_type; } template - typename std::enable_if< !Stat::empty >::type construct_bucket( internal_bucket_type* bucket ) + typename std::enable_if< !Stat::empty >::type construct_bucket( internal_bucket_type* b ) { - new (bucket) internal_bucket_type( m_Stat ); + new (b) internal_bucket_type( m_Stat ); } template