Merge some documentation changes and inspect fixes.

Merged revisions 55370,55729,56440,56570-56571,56603,56697-56699 via svnmerge from 
https://svn.boost.org/svn/boost/trunk

........
  r55370 | danieljames | 2009-08-02 19:18:14 +0100 (Sun, 02 Aug 2009) | 1 line
  
  Pass through more elements in doxygen2boostbook. Refs #3309.
........
  r55729 | danieljames | 2009-08-23 11:07:25 +0100 (Sun, 23 Aug 2009) | 3 lines
  
  Add depencies on doxygen documentation to standalone documentation targets.
  
  This seems to be needed for building pdfs.
........
  r56440 | danieljames | 2009-09-27 20:11:39 +0100 (Sun, 27 Sep 2009) | 1 line
  
  Fix silly error in doxygen test file.
........
  r56570 | danieljames | 2009-10-04 11:37:36 +0100 (Sun, 04 Oct 2009) | 1 line
  
  Clean up some unordered TODOs.
........
  r56571 | danieljames | 2009-10-04 11:37:56 +0100 (Sun, 04 Oct 2009) | 1 line
  
  Detab.
........
  r56603 | danieljames | 2009-10-05 22:29:39 +0100 (Mon, 05 Oct 2009) | 1 line
  
  Various inspect fixes.
........
  r56697 | danieljames | 2009-10-10 14:00:28 +0100 (Sat, 10 Oct 2009) | 1 line
  
  Add forwarding html file for accumulators.
........
  r56698 | danieljames | 2009-10-10 14:01:14 +0100 (Sat, 10 Oct 2009) | 1 line
  
  Missing newline.
........
  r56699 | danieljames | 2009-10-10 14:01:30 +0100 (Sat, 10 Oct 2009) | 1 line
  
  Add copyright to boostbook reference xml.
........


[SVN r56702]
This commit is contained in:
Daniel James
2009-10-10 14:53:46 +00:00
parent 3529bc00dc
commit 06b0b1d31c
5 changed files with 55 additions and 19 deletions

View File

@@ -15,7 +15,6 @@ namespace boost { namespace unordered_detail {
//////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////
// Buckets // Buckets
// TODO: Are these needed?
template <class A, class G> template <class A, class G>
inline BOOST_DEDUCED_TYPENAME hash_buckets<A, G>::bucket_ptr inline BOOST_DEDUCED_TYPENAME hash_buckets<A, G>::bucket_ptr
@@ -32,7 +31,7 @@ namespace boost { namespace unordered_detail {
} }
template <class A, class G> template <class A, class G>
inline std::size_t hash_buckets<A, G>::bucket_size(std::size_t index) const std::size_t hash_buckets<A, G>::bucket_size(std::size_t index) const
{ {
if(!buckets_) return 0; if(!buckets_) return 0;
bucket_ptr ptr = get_bucket(index)->next_; bucket_ptr ptr = get_bucket(index)->next_;

View File

@@ -257,7 +257,6 @@ namespace boost { namespace unordered_detail {
// if hash function throws, or inserting > 1 element, basic exception safety // if hash function throws, or inserting > 1 element, basic exception safety
// strong otherwise // strong otherwise
// TODO: Should I special case an empty container?
template <class H, class P, class A, class K> template <class H, class P, class A, class K>
template <class I> template <class I>
void hash_equivalent_table<H, P, A, K>::insert_range(I i, I j) void hash_equivalent_table<H, P, A, K>::insert_range(I i, I j)

View File

@@ -431,23 +431,20 @@ namespace boost { namespace unordered_detail {
// if hash function throws, basic exception safety // if hash function throws, basic exception safety
// strong otherwise. // strong otherwise.
// TODO: Should this always create buckets?
template <class H, class P, class A, class G, class K> template <class H, class P, class A, class G, class K>
inline void hash_table<H, P, A, G, K>::rehash(std::size_t min_buckets) inline void hash_table<H, P, A, G, K>::rehash(std::size_t min_buckets)
{ {
using namespace std; using namespace std;
if(!this->buckets_) { if(!this->size_) {
if(this->buckets_) this->delete_buckets();
this->bucket_count_ = next_prime(min_buckets); this->bucket_count_ = next_prime(min_buckets);
this->create_buckets();
this->init_buckets();
} }
else { else {
// no throw: // no throw:
// TODO: Needlessly calling next_prime twice. min_buckets = next_prime((std::max)(min_buckets,
min_buckets = (std::max)( double_to_size_t(floor(this->size_ / (double) mlf_)) + 1));
next_prime(min_buckets),
this->min_buckets_for_size(this->size_));
if(min_buckets != this->bucket_count_) rehash_impl(min_buckets); if(min_buckets != this->bucket_count_) rehash_impl(min_buckets);
} }
} }
@@ -619,7 +616,6 @@ namespace boost { namespace unordered_detail {
template <class H, class P, class A, class G, class K> template <class H, class P, class A, class G, class K>
void hash_table<H, P, A, G, K>::clear() void hash_table<H, P, A, G, K>::clear()
{ {
// TODO: Is this check needed when called internally?
if(!this->size_) return; if(!this->size_) return;
bucket_ptr end = this->get_bucket(this->bucket_count_); bucket_ptr end = this->get_bucket(this->bucket_count_);
@@ -645,8 +641,7 @@ namespace boost { namespace unordered_detail {
} }
template <class H, class P, class A, class G, class K> template <class H, class P, class A, class G, class K>
std::size_t hash_table<H, P, A, G, K> std::size_t hash_table<H, P, A, G, K>::erase_key(key_type const& k)
::erase_key(key_type const& k)
{ {
if(!this->size_) return 0; if(!this->size_) return 0;

View File

@@ -32,6 +32,43 @@ void rehash_empty_test1(X* = 0)
BOOST_TEST(postcondition(x, 0)); BOOST_TEST(postcondition(x, 0));
} }
template <class X>
void rehash_empty_test2(X* = 0, test::random_generator generator = test::default_generator)
{
test::random_values<X> v(1000, generator);
test::ordered<X> tracker;
X x;
x.rehash(10000);
BOOST_TEST(postcondition(x, 10000));
tracker.insert_range(v.begin(), v.end());
x.insert(v.begin(), v.end());
tracker.compare(x);
BOOST_TEST(postcondition(x, 10000));
}
template <class X>
void rehash_empty_test3(X* = 0, test::random_generator generator = test::default_generator)
{
test::random_values<X> v(1000, generator);
test::ordered<X> tracker;
X x;
x.rehash(0);
BOOST_TEST(postcondition(x, 0));
tracker.insert_range(v.begin(), v.end());
x.insert(v.begin(), v.end());
tracker.compare(x);
BOOST_TEST(postcondition(x, 0));
}
template <class X> template <class X>
void rehash_test1(X* = 0, test::random_generator generator = test::default_generator) void rehash_test1(X* = 0, test::random_generator generator = test::default_generator)
{ {
@@ -63,6 +100,12 @@ boost::unordered_multimap<int, int>* int_multimap_ptr;
UNORDERED_TEST(rehash_empty_test1, UNORDERED_TEST(rehash_empty_test1,
((int_set_ptr)(int_multiset_ptr)(int_map_ptr)(int_multimap_ptr)) ((int_set_ptr)(int_multiset_ptr)(int_map_ptr)(int_multimap_ptr))
) )
UNORDERED_TEST(rehash_empty_test2,
((int_set_ptr)(int_multiset_ptr)(int_map_ptr)(int_multimap_ptr))
)
UNORDERED_TEST(rehash_empty_test3,
((int_set_ptr)(int_multiset_ptr)(int_map_ptr)(int_multimap_ptr))
)
UNORDERED_TEST(rehash_test1, UNORDERED_TEST(rehash_test1,
((int_set_ptr)(int_multiset_ptr)(int_map_ptr)(int_multimap_ptr)) ((int_set_ptr)(int_multiset_ptr)(int_map_ptr)(int_multimap_ptr))
) )