diff --git a/doc/unordered.qbk b/doc/unordered.qbk index 1cef8921..275486ab 100644 --- a/doc/unordered.qbk +++ b/doc/unordered.qbk @@ -2,7 +2,7 @@ / Distributed under the Boost Software License, Version 1.0. (See accompanying / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) ] -[library Unordered Associative Containers +[library Boost.Unordered [quickbook 1.4] [authors [James, Daniel]] [copyright 2003 2004 Jeremy B. Maitin-Shepard] diff --git a/include/boost/unordered/detail/hash_table.hpp b/include/boost/unordered/detail/hash_table.hpp index 7bb4a6ad..3fc9a0c5 100644 --- a/include/boost/unordered/detail/hash_table.hpp +++ b/include/boost/unordered/detail/hash_table.hpp @@ -109,6 +109,18 @@ namespace boost { { return std::pair(Dst1(x.first), Dst2(x.second)); } + +#if !defined(BOOST_NO_STD_DISTANCE) + using ::std::distance; +#else + template + inline std::size_t distance(ForwardIterator i, ForwardIterator j) { + std::size_t x; + std::distance(i, j, x); + return x; + } +#endif + } } diff --git a/include/boost/unordered/detail/hash_table_impl.hpp b/include/boost/unordered/detail/hash_table_impl.hpp index 9dceeca7..f9780fc8 100644 --- a/include/boost/unordered/detail/hash_table_impl.hpp +++ b/include/boost/unordered/detail/hash_table_impl.hpp @@ -1045,7 +1045,7 @@ namespace boost { boost::forward_traversal_tag) { // max load factor isn't set yet, but when it is, it'll be 1.0. - return (std::max)(static_cast(std::distance(i, j)) + 1, n); + return (std::max)(static_cast(unordered_detail::distance(i, j)) + 1, n); } template @@ -1312,7 +1312,7 @@ namespace boost { // throws - basic: if (need_to_reserve) { rehash_impl(double_to_size_t(floor( - n / (double) mlf_ * 1.25)) + 1); + n / (double) mlf_ * 1.25)) + 1); } BOOST_ASSERT(n < max_load_ || n > max_size()); return need_to_reserve; @@ -1545,7 +1545,7 @@ namespace boost { template void insert_for_range(I i, I j, forward_traversal_tag) { - size_type distance = std::distance(i, j); + size_type distance = unordered_detail::distance(i, j); if(distance == 1) { insert(*i); } @@ -1687,7 +1687,7 @@ namespace boost { template size_type insert_size(I i, I j, boost::forward_traversal_tag) { - return std::distance(i, j); + return unordered_detail::distance(i, j); } template diff --git a/test/helpers/allocator.hpp b/test/helpers/allocator.hpp index 7da6eb8b..69ea8771 100644 --- a/test/helpers/allocator.hpp +++ b/test/helpers/allocator.hpp @@ -45,13 +45,7 @@ namespace test return ptr; } - pointer allocate(size_type n, const_pointer u) { return allocate(n); } - -#if defined(__IBMCPP__) || BOOST_WORKAROUND(BOOST_RWSTD_VER, < 0x04020000) - // Workaround for IBM Visual Age and Rogue Wave (or maybe just Apache stdcxx?) - // which seem to use a void pointer for the second argument. pointer allocate(size_type n, void const* u) { return allocate(n); } -#endif void deallocate(pointer p, size_type) { using namespace std; diff --git a/test/helpers/random_values.hpp b/test/helpers/random_values.hpp index 6f9b5d84..58178b34 100644 --- a/test/helpers/random_values.hpp +++ b/test/helpers/random_values.hpp @@ -100,7 +100,7 @@ namespace test : public std::list { random_values(int count, test::random_generator const& generator = - test::default_generator) + test::default_generator) { static test::unordered_generator gen(generator); gen.fill(*this, count); diff --git a/test/objects/exception.hpp b/test/objects/exception.hpp index 803be4ae..b6f10ec3 100644 --- a/test/objects/exception.hpp +++ b/test/objects/exception.hpp @@ -313,7 +313,7 @@ namespace exception //return pointer(static_cast(::operator new(n * sizeof(T)))); } - pointer allocate(size_type n, const_pointer u) + pointer allocate(size_type n, void const* u) { T* ptr = 0; UNORDERED_SCOPE(allocator::allocate(size_type, const_pointer)) { diff --git a/test/objects/minimal.hpp b/test/objects/minimal.hpp index 257a5d75..4b8d07a7 100644 --- a/test/objects/minimal.hpp +++ b/test/objects/minimal.hpp @@ -195,7 +195,8 @@ namespace minimal return pointer(static_cast(::operator new(n * sizeof(T)))); } - pointer allocate(size_type n, const_pointer u) + template + pointer allocate(size_type n, const_ptr u) { return pointer(static_cast(::operator new(n * sizeof(T)))); } diff --git a/test/objects/test.hpp b/test/objects/test.hpp index a81149d9..d9a4c597 100644 --- a/test/objects/test.hpp +++ b/test/objects/test.hpp @@ -194,7 +194,7 @@ namespace test return ptr; } - pointer allocate(size_type n, const_pointer u) + pointer allocate(size_type n, void const* u) { pointer ptr(static_cast(::operator new(n * sizeof(T)))); detail::tracker.track_allocate((void*) ptr, n, sizeof(T), tag_); diff --git a/test/unordered/simple_tests.cpp b/test/unordered/simple_tests.cpp index 7d398cb4..4824cbd0 100644 --- a/test/unordered/simple_tests.cpp +++ b/test/unordered/simple_tests.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include "../helpers/equivalent.hpp" @@ -84,8 +85,8 @@ void simple_test(X const& a) int main() { - using namespace std; - srand(14878); + using namespace std; + srand(14878); std::cout<<"Test unordered_set.\n"; boost::unordered_set set; @@ -99,9 +100,9 @@ int main() simple_test(multiset); for(int i1 = 0; i1 < 1000; ++i1) { - int count = rand() % 10, index = rand(); - for(int j = 0; j < count; ++j) - multiset.insert(index); + int count = rand() % 10, index = rand(); + for(int j = 0; j < count; ++j) + multiset.insert(index); } simple_test(multiset); @@ -109,7 +110,7 @@ int main() boost::unordered_map map; for(int i2 = 0; i2 < 1000; ++i2) { - map.insert(std::pair(rand(), rand())); + map.insert(std::pair(rand(), rand())); } simple_test(map); @@ -117,9 +118,9 @@ int main() boost::unordered_multimap multimap; for(int i3 = 0; i3 < 1000; ++i3) { - int count = rand() % 10, index = rand(); - for(int j = 0; j < count; ++j) - multimap.insert(std::pair(index, rand())); + int count = rand() % 10, index = rand(); + for(int j = 0; j < count; ++j) + multimap.insert(std::pair(index, rand())); } simple_test(multimap);