forked from boostorg/unordered
Comment about clear_buckets/create_buckets awkwardness.
They both leave the container in an invalid state that needs to be cleaned up immediately. This confused me slightly.
This commit is contained in:
@ -2765,8 +2765,30 @@ struct table : boost::unordered::detail::functions<typename Types::hasher,
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
// Create buckets
|
||||
// Clear buckets and Create buckets
|
||||
//
|
||||
// IMPORTANT: If the container already contains any elements, the
|
||||
// buckets will not contain any links to them. This will
|
||||
// need to be dealt with, for example by:
|
||||
// - deleting them
|
||||
// - putting them in a 'node_holder' for future use
|
||||
// (as in assignment)
|
||||
// - placing them in buckets (see rehash_impl)
|
||||
|
||||
// Clear the bucket pointers.
|
||||
void clear_buckets()
|
||||
{
|
||||
bucket_pointer end = get_bucket(bucket_count_);
|
||||
for (bucket_pointer it = buckets_; it != end; ++it) {
|
||||
it->next_ = node_pointer();
|
||||
}
|
||||
}
|
||||
|
||||
// Create container buckets. If the container already contains any buckets
|
||||
// the linked list will be transferred to the new buckets, but none
|
||||
// of the bucket pointers will be set. See above note.
|
||||
//
|
||||
// Strong exception safety.
|
||||
void create_buckets(std::size_t new_count)
|
||||
{
|
||||
std::size_t length = new_count + 1;
|
||||
@ -2931,14 +2953,6 @@ struct table : boost::unordered::detail::functions<typename Types::hasher,
|
||||
BOOST_ASSERT(!size_);
|
||||
}
|
||||
|
||||
void clear_buckets()
|
||||
{
|
||||
bucket_pointer end = get_bucket(bucket_count_);
|
||||
for (bucket_pointer it = buckets_; it != end; ++it) {
|
||||
it->next_ = node_pointer();
|
||||
}
|
||||
}
|
||||
|
||||
void destroy_buckets()
|
||||
{
|
||||
bucket_pointer end = get_bucket(bucket_count_ + 1);
|
||||
|
Reference in New Issue
Block a user