Unordered: Support empty containers in node_holder.

[SVN r80562]
This commit is contained in:
Daniel James
2012-09-17 18:59:29 +00:00
parent 53f278312f
commit 94ef1ac391
2 changed files with 10 additions and 11 deletions

View File

@ -444,10 +444,12 @@ namespace boost { namespace unordered { namespace detail {
base(b.node_alloc()),
nodes_()
{
typename Table::previous_pointer prev = b.get_previous_start();
nodes_ = static_cast<node_pointer>(prev->next_);
prev->next_ = link_pointer();
b.size_ = 0;
if (b.size_) {
typename Table::previous_pointer prev = b.get_previous_start();
nodes_ = static_cast<node_pointer>(prev->next_);
prev->next_ = link_pointer();
b.size_ = 0;
}
}
~node_holder();
@ -508,7 +510,7 @@ namespace boost { namespace unordered { namespace detail {
}
}
iterator get_start() const
iterator begin() const
{
return iterator(nodes_);
}

View File

@ -400,7 +400,7 @@ namespace boost { namespace unordered { namespace detail {
move_nodes<node_allocator> move(node_alloc());
node_holder<node_allocator> nodes(x);
table_impl::fill_buckets(nodes.get_start(), *this, move);
table_impl::fill_buckets(nodes.begin(), *this, move);
}
}
@ -765,11 +765,8 @@ namespace boost { namespace unordered { namespace detail {
// elements, assigning to them if possible, and deleting
// any that are left over.
move_assign_nodes<table> assign(*this);
if (x.size_) {
node_holder<node_allocator> nodes(x);
table_impl::fill_buckets(nodes.get_start(), *this, assign);
}
node_holder<node_allocator> nodes(x);
table_impl::fill_buckets(nodes.begin(), *this, assign);
}
}