diff --git a/doc/changes.qbk b/doc/changes.qbk index 682e36e6..e29b7a85 100644 --- a/doc/changes.qbk +++ b/doc/changes.qbk @@ -31,7 +31,6 @@ First official release. * Emplace support when rvalue references and variadic template are available. * More efficient node allocation when rvalue references and variadic template are available. -* Added equality operators and hash functions - ([@http://svn.boost.org/trac/boost/ticket/1557 Ticket 1557]). +* Added equality operators. [endsect] diff --git a/doc/rationale.qbk b/doc/rationale.qbk index 908bb5e3..63ca6441 100644 --- a/doc/rationale.qbk +++ b/doc/rationale.qbk @@ -104,8 +104,6 @@ implemented. They are specified differently to the standard associative containers, comparing keys using the equality predicate rather than `operator==`. This is inconsistent with the other containers but it is probably closer to user's expectations. -I have also added a `hash_value` free function so that the containers can be -hashed by [classref boost::hash]. [h2 Active Issues and Proposals] diff --git a/doc/ref.xml b/doc/ref.xml index f33aec2a..d7dd9259 100644 --- a/doc/ref.xml +++ b/doc/ref.xml @@ -702,25 +702,6 @@ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is a boost extension. - - - - unordered_set<Value, Hash, Pred, Alloc> const& - - std::size_t - - This is a boost extension. - - @@ -1449,25 +1430,6 @@ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is a boost extension. - - - - unordered_multiset<Value, Hash, Pred, Alloc> const& - - std::size_t - - This is a boost extension. - - @@ -2249,27 +2211,6 @@ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is a boost extension. - - - - unordered_map<Key, Mapped, Hash, Pred, Alloc> const& - - std::size_t - - This is a boost extension. - - @@ -3012,27 +2953,6 @@ file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) This is a boost extension. - - - - unordered_multimap<Key, Mapped, Hash, Pred, Alloc> const& - - std::size_t - - This is a boost extension. - - diff --git a/include/boost/unordered/detail/hash_table_impl.hpp b/include/boost/unordered/detail/hash_table_impl.hpp index fc8443ee..e78962fb 100644 --- a/include/boost/unordered/detail/hash_table_impl.hpp +++ b/include/boost/unordered/detail/hash_table_impl.hpp @@ -2245,61 +2245,6 @@ namespace boost { return true; } - // - // hash_value - unordered container hash function. - // - - template - std::size_t group_hash(BOOST_UNORDERED_TABLE const& t, - typename BOOST_UNORDERED_TABLE_DATA::link_ptr it, - type_wrapper*) - { - typedef BOOST_UNORDERED_TABLE_DATA data; - std::size_t seed = data::group_count(it); - std::size_t hashed_key = t.hash_function()(data::get_value(it)); - boost::hash_combine(seed, hashed_key); - return seed; - } - - template - std::size_t group_hash(BOOST_UNORDERED_TABLE const& t, - typename BOOST_UNORDERED_TABLE_DATA::link_ptr it, - void*) - { - typedef BOOST_UNORDERED_TABLE_DATA data; - typedef typename data::link_ptr link_ptr; - - std::size_t seed = t.hash_function()(data::get_value(it).first); - - link_ptr end = data::next_group(it); - - do { - boost::hash_combine(seed, data::get_value(it).second); - it = it->next_; - } while(it != end); - - return seed; - } - - template - std::size_t hash_value(BOOST_UNORDERED_TABLE const& t) - { - typedef BOOST_UNORDERED_TABLE_DATA data; - typedef typename data::link_ptr link_ptr; - typedef typename data::bucket_ptr bucket_ptr; - - std::size_t seed = 0; - - for(bucket_ptr i = t.data_.cached_begin_bucket_, - j = t.data_.buckets_end(); i != j; ++i) - { - for(link_ptr it(i->next_); BOOST_UNORDERED_BORLAND_BOOL(it); it = data::next_group(it)) - seed ^= group_hash(t, it, (type_wrapper*)0); - } - - return seed; - } - // Iterators template class BOOST_UNORDERED_ITERATOR; diff --git a/include/boost/unordered_map.hpp b/include/boost/unordered_map.hpp index 5f711650..484cf42f 100644 --- a/include/boost/unordered_map.hpp +++ b/include/boost/unordered_map.hpp @@ -40,8 +40,6 @@ namespace boost bool operator!=(unordered_map const&, unordered_map const&); template - std::size_t hash_value(unordered_map const&); - template void swap(unordered_map&, unordered_map&); @@ -58,8 +56,6 @@ namespace boost bool operator!=(unordered_multimap const&, unordered_multimap const&); template - std::size_t hash_value(unordered_multimap const&); - template void swap(unordered_multimap&, unordered_multimap&); @@ -424,11 +420,9 @@ namespace boost #if BOOST_WORKAROUND(BOOST_MSVC, < 1300) friend bool operator==(unordered_map const&, unordered_map const&); friend bool operator!=(unordered_map const&, unordered_map const&); - friend std::size_t hash_value(unordered_map const&); #else friend bool operator==<>(unordered_map const&, unordered_map const&); friend bool operator!=<>(unordered_map const&, unordered_map const&); - friend std::size_t hash_value<>(unordered_map const&); #endif }; // class template unordered_map @@ -446,12 +440,6 @@ namespace boost return !boost::unordered_detail::equals(m1.base, m2.base); } - template - inline std::size_t hash_value(unordered_map const& m) - { - return boost::unordered_detail::hash_value(m.base); - } - template inline void swap(unordered_map &m1, unordered_map &m2) @@ -804,11 +792,9 @@ namespace boost #if BOOST_WORKAROUND(BOOST_MSVC, < 1300) friend bool operator==(unordered_multimap const&, unordered_multimap const&); friend bool operator!=(unordered_multimap const&, unordered_multimap const&); - friend std::size_t hash_value(unordered_multimap const&); #else friend bool operator==<>(unordered_multimap const&, unordered_multimap const&); friend bool operator!=<>(unordered_multimap const&, unordered_multimap const&); - friend std::size_t hash_value<>(unordered_multimap const&); #endif }; // class template unordered_multimap @@ -826,12 +812,6 @@ namespace boost return !boost::unordered_detail::equals(m1.base, m2.base); } - template - inline std::size_t hash_value(unordered_multimap const& m) - { - return boost::unordered_detail::hash_value(m.base); - } - template inline void swap(unordered_multimap &m1, unordered_multimap &m2) diff --git a/include/boost/unordered_set.hpp b/include/boost/unordered_set.hpp index 0f34c0fd..5b82f002 100644 --- a/include/boost/unordered_set.hpp +++ b/include/boost/unordered_set.hpp @@ -39,8 +39,6 @@ namespace boost bool operator!=(unordered_set const&, unordered_set const&); template - std::size_t hash_value(unordered_set const& m); - template void swap(unordered_set &m1, unordered_set &m2); @@ -56,8 +54,6 @@ namespace boost bool operator!=(unordered_multiset const&, unordered_multiset const&); template - std::size_t hash_value(unordered_multiset const& m); - template void swap(unordered_multiset &m1, unordered_multiset &m2); @@ -394,11 +390,9 @@ namespace boost #if BOOST_WORKAROUND(BOOST_MSVC, < 1300) friend bool operator==(unordered_set const&, unordered_set const&); friend bool operator!=(unordered_set const&, unordered_set const&); - friend std::size_t hash_value(unordered_set const&); #else friend bool operator==<>(unordered_set const&, unordered_set const&); friend bool operator!=<>(unordered_set const&, unordered_set const&); - friend std::size_t hash_value<>(unordered_set const&); #endif }; // class template unordered_set @@ -416,12 +410,6 @@ namespace boost return !boost::unordered_detail::equals(m1.base, m2.base); } - template - inline std::size_t hash_value(unordered_set const& m) - { - return boost::unordered_detail::hash_value(m.base); - } - template inline void swap(unordered_set &m1, unordered_set &m2) @@ -759,11 +747,9 @@ namespace boost #if BOOST_WORKAROUND(BOOST_MSVC, < 1300) friend bool operator==(unordered_multiset const&, unordered_multiset const&); friend bool operator!=(unordered_multiset const&, unordered_multiset const&); - friend std::size_t hash_value(unordered_multiset const&); #else friend bool operator==<>(unordered_multiset const&, unordered_multiset const&); friend bool operator!=<>(unordered_multiset const&, unordered_multiset const&); - friend std::size_t hash_value<>(unordered_multiset const&); #endif }; // class template unordered_multiset @@ -781,12 +767,6 @@ namespace boost return !boost::unordered_detail::equals(m1.base, m2.base); } - template - inline std::size_t hash_value(unordered_multiset const& m) - { - return boost::unordered_detail::hash_value(m.base); - } - template inline void swap(unordered_multiset &m1, unordered_multiset &m2) diff --git a/test/unordered/compile_tests.hpp b/test/unordered/compile_tests.hpp index 5e65a72d..34265fca 100644 --- a/test/unordered/compile_tests.hpp +++ b/test/unordered/compile_tests.hpp @@ -168,11 +168,6 @@ void equality_test(X& r) test::check_return_type::equals(a == b); test::check_return_type::equals(a != b); -#if defined(BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP) - test::check_return_type::equals(boost::hash_value(a)); -#else - test::check_return_type::equals(hash_value(a)); -#endif } template