mirror of
https://github.com/boostorg/intrusive.git
synced 2025-08-03 22:44:43 +02:00
hashtable_node: change pointer and references types from raw to those specified in value_traits.
This commit is contained in:
@@ -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
|
|
||||||
< std::forward_iterator_tag
|
|
||||||
, 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 typename BucketValueTraits::value_traits value_traits;
|
||||||
typedef typename BucketValueTraits::bucket_traits bucket_traits;
|
typedef typename BucketValueTraits::bucket_traits bucket_traits;
|
||||||
|
|
||||||
|
typedef iiterator< value_traits, IsConst
|
||||||
|
, std::forward_iterator_tag> types_t;
|
||||||
|
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 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
|
||||||
|
Reference in New Issue
Block a user