From 86d4d21250d451be72b7c39b2abfd00cc0241024 Mon Sep 17 00:00:00 2001 From: Daniel James Date: Fri, 11 Jul 2014 08:40:07 +0100 Subject: [PATCH] Make value_base a member of pointer nodes. --- include/boost/unordered/detail/equivalent.hpp | 7 ++++++- include/boost/unordered/detail/unique.hpp | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/include/boost/unordered/detail/equivalent.hpp b/include/boost/unordered/detail/equivalent.hpp index d5538d73..58478f99 100644 --- a/include/boost/unordered/detail/equivalent.hpp +++ b/include/boost/unordered/detail/equivalent.hpp @@ -52,15 +52,16 @@ namespace boost { namespace unordered { namespace detail { template struct grouped_ptr_node : - boost::unordered::detail::value_base, boost::unordered::detail::ptr_bucket { + typedef T value_type; typedef boost::unordered::detail::ptr_bucket bucket_base; typedef grouped_ptr_node* node_pointer; typedef ptr_bucket* link_pointer; node_pointer group_prev_; std::size_t hash_; + boost::unordered::detail::value_base value_base_; grouped_ptr_node() : bucket_base(), @@ -73,6 +74,10 @@ namespace boost { namespace unordered { namespace detail { group_prev_ = self; } + void* address() { return value_base_.address(); } + value_type& value() { return value_base_.value(); } + value_type* value_ptr() { return value_base_.value_ptr(); } + private: grouped_ptr_node& operator=(grouped_ptr_node const&); }; diff --git a/include/boost/unordered/detail/unique.hpp b/include/boost/unordered/detail/unique.hpp index 5fd5a46d..0f0f5951 100644 --- a/include/boost/unordered/detail/unique.hpp +++ b/include/boost/unordered/detail/unique.hpp @@ -49,14 +49,15 @@ namespace boost { namespace unordered { namespace detail { template struct ptr_node : - boost::unordered::detail::value_base, boost::unordered::detail::ptr_bucket { + typedef T value_type; typedef boost::unordered::detail::ptr_bucket bucket_base; typedef ptr_node* node_pointer; typedef ptr_bucket* link_pointer; std::size_t hash_; + boost::unordered::detail::value_base value_base_; ptr_node() : bucket_base(), @@ -67,6 +68,10 @@ namespace boost { namespace unordered { namespace detail { { } + void* address() { return value_base_.address(); } + value_type& value() { return value_base_.value(); } + value_type* value_ptr() { return value_base_.value_ptr(); } + private: ptr_node& operator=(ptr_node const&); };