hashtable_node: change pointer and references types from raw to those specified in value_traits.

This commit is contained in:
Ion Gaztañaga
2015-04-14 14:54:53 +02:00
parent 8522ff18e8
commit 1614d58b74

View File

@@ -154,52 +154,48 @@ struct get_slist_impl
template<class BucketValueTraits, bool IsConst> template<class BucketValueTraits, bool IsConst>
class hashtable_iterator class hashtable_iterator
{ {
typedef boost::intrusive::iterator typedef typename BucketValueTraits::value_traits value_traits;
< std::forward_iterator_tag typedef typename BucketValueTraits::bucket_traits bucket_traits;
, typename BucketValueTraits::value_traits::value_type
, typename pointer_traits<typename BucketValueTraits::value_traits::value_type*>::difference_type
, typename detail::add_const_if_c
<typename BucketValueTraits::value_traits::value_type, IsConst>::type *
, typename detail::add_const_if_c
<typename BucketValueTraits::value_traits::value_type, IsConst>::type &
> iterator_traits;
typedef typename BucketValueTraits::value_traits value_traits; typedef iiterator< value_traits, IsConst
typedef typename BucketValueTraits::bucket_traits bucket_traits; , std::forward_iterator_tag> types_t;
typedef typename value_traits::node_traits node_traits; public:
typedef typename types_t::iterator_traits::difference_type difference_type;
typedef typename types_t::iterator_traits::value_type value_type;
typedef typename types_t::iterator_traits::pointer pointer;
typedef typename types_t::iterator_traits::reference reference;
typedef typename types_t::iterator_traits::iterator_category iterator_category;
private:
typedef typename value_traits::node_traits node_traits;
typedef typename node_traits::node_ptr node_ptr;
typedef typename detail::get_slist_impl typedef typename detail::get_slist_impl
<typename detail::reduced_slist_node_traits < typename detail::reduced_slist_node_traits
<typename value_traits::node_traits>::type <node_traits>::type >::type slist_impl;
>::type slist_impl; typedef typename slist_impl::iterator siterator;
typedef typename slist_impl::iterator siterator; typedef typename slist_impl::const_iterator const_siterator;
typedef typename slist_impl::const_iterator const_siterator; typedef detail::bucket_impl<slist_impl> bucket_type;
typedef detail::bucket_impl<slist_impl> bucket_type;
typedef typename pointer_traits typedef typename pointer_traits
<typename value_traits::pointer>::template rebind_pointer <pointer>::template rebind_pointer
< const BucketValueTraits >::type const_bucketvaltraits_ptr; < const BucketValueTraits >::type const_bucketvaltraits_ptr;
typedef typename slist_impl::size_type size_type; typedef typename slist_impl::size_type size_type;
static node_ptr downcast_bucket(typename bucket_type::node_ptr p)
static typename node_traits::node_ptr downcast_bucket(typename bucket_type::node_ptr p)
{ {
return pointer_traits<typename node_traits::node_ptr>:: return pointer_traits<node_ptr>::
pointer_to(static_cast<typename node_traits::node&>(*p)); pointer_to(static_cast<typename node_traits::node&>(*p));
} }
public: public:
typedef typename iterator_traits::difference_type difference_type;
typedef typename iterator_traits::value_type value_type;
typedef typename iterator_traits::pointer pointer;
typedef typename iterator_traits::reference reference;
typedef typename iterator_traits::iterator_category iterator_category;
hashtable_iterator () hashtable_iterator ()
: slist_it_() //Value initialization to achieve "null iterators" (N3644) : slist_it_() //Value initialization to achieve "null iterators" (N3644)
{} {}
explicit hashtable_iterator(siterator ptr, const BucketValueTraits *cont) explicit hashtable_iterator(siterator ptr, const BucketValueTraits *cont)
: slist_it_ (ptr), traitsptr_ (cont ? pointer_traits<const_bucketvaltraits_ptr>::pointer_to(*cont) : const_bucketvaltraits_ptr() ) : slist_it_ (ptr)
, traitsptr_ (cont ? pointer_traits<const_bucketvaltraits_ptr>::pointer_to(*cont) : const_bucketvaltraits_ptr() )
{} {}
hashtable_iterator(const hashtable_iterator<BucketValueTraits, false> &other) hashtable_iterator(const hashtable_iterator<BucketValueTraits, false> &other)
@@ -212,7 +208,6 @@ class hashtable_iterator
hashtable_iterator<BucketValueTraits, false> unconst() const hashtable_iterator<BucketValueTraits, false> unconst() const
{ return hashtable_iterator<BucketValueTraits, false>(this->slist_it(), this->get_bucket_value_traits()); } { return hashtable_iterator<BucketValueTraits, false>(this->slist_it(), this->get_bucket_value_traits()); }
public:
hashtable_iterator& operator++() hashtable_iterator& operator++()
{ this->increment(); return *this; } { this->increment(); return *this; }
@@ -234,8 +229,8 @@ class hashtable_iterator
pointer operator->() const pointer operator->() const
{ {
return boost::intrusive::detail::to_raw_pointer(this->priv_value_traits().to_value_ptr return this->priv_value_traits().to_value_ptr
(downcast_bucket(slist_it_.pointed_node()))); (downcast_bucket(slist_it_.pointed_node()));
} }
const const_bucketvaltraits_ptr &get_bucket_value_traits() const const const_bucketvaltraits_ptr &get_bucket_value_traits() const