Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 21 additions & 40 deletions libcxx/include/__hash_table
Original file line number Diff line number Diff line change
Expand Up @@ -201,22 +201,11 @@ struct __hash_node_types;

template <class _NodePtr, class _Tp, class _VoidPtr>
struct __hash_node_types<_NodePtr, __hash_node<_Tp, _VoidPtr> > {
typedef ptrdiff_t difference_type;
typedef size_t size_type;

typedef __rebind_pointer_t<_NodePtr, void> __void_pointer;

typedef typename pointer_traits<_NodePtr>::element_type __node_type;
typedef _NodePtr __node_pointer;

typedef __hash_node_base<__node_pointer> __node_base_type;
typedef __rebind_pointer_t<_NodePtr, __node_base_type> __node_base_pointer;

typedef typename __node_base_type::__next_pointer __next_pointer;
typedef typename __hash_node_base<_NodePtr>::__next_pointer __next_pointer;

using __node_value_type _LIBCPP_NODEBUG = __get_hash_node_value_type_t<_Tp>;
typedef __rebind_pointer_t<_VoidPtr, __node_value_type> __node_value_type_pointer;
typedef __rebind_pointer_t<_VoidPtr, const __node_value_type> __const_node_value_type_pointer;

private:
static_assert(!is_const<__node_type>::value, "_NodePtr should never be a pointer to const");
Expand All @@ -237,13 +226,6 @@ struct __hash_node_types_from_iterator<__hash_local_iterator<_NodePtr> > : __has
template <class _NodePtr>
struct __hash_node_types_from_iterator<__hash_const_local_iterator<_NodePtr> > : __hash_node_types<_NodePtr> {};

template <class _NodeValueTp, class _VoidPtr>
struct __make_hash_node_types {
typedef __hash_node<_NodeValueTp, _VoidPtr> _NodeTp;
typedef __rebind_pointer_t<_VoidPtr, _NodeTp> _NodePtr;
typedef __hash_node_types<_NodePtr> type;
};

template <class _NodePtr>
class __hash_iterator {
typedef __hash_node_types<_NodePtr> _NodeTypes;
Expand All @@ -255,9 +237,9 @@ class __hash_iterator {
public:
typedef forward_iterator_tag iterator_category;
typedef typename _NodeTypes::__node_value_type value_type;
typedef typename _NodeTypes::difference_type difference_type;
using difference_type = ptrdiff_t;
typedef value_type& reference;
typedef typename _NodeTypes::__node_value_type_pointer pointer;
using pointer = __rebind_pointer_t<_NodePtr, value_type>;

_LIBCPP_HIDE_FROM_ABI __hash_iterator() _NOEXCEPT : __node_(nullptr) {}

Expand Down Expand Up @@ -322,9 +304,9 @@ public:

typedef forward_iterator_tag iterator_category;
typedef typename _NodeTypes::__node_value_type value_type;
typedef typename _NodeTypes::difference_type difference_type;
using difference_type = ptrdiff_t;
typedef const value_type& reference;
typedef typename _NodeTypes::__const_node_value_type_pointer pointer;
using pointer = __rebind_pointer_t<_NodePtr, const value_type>;

_LIBCPP_HIDE_FROM_ABI __hash_const_iterator() _NOEXCEPT : __node_(nullptr) {}

Expand Down Expand Up @@ -387,9 +369,9 @@ class __hash_local_iterator {
public:
typedef forward_iterator_tag iterator_category;
typedef typename _NodeTypes::__node_value_type value_type;
typedef typename _NodeTypes::difference_type difference_type;
using difference_type = ptrdiff_t;
typedef value_type& reference;
typedef typename _NodeTypes::__node_value_type_pointer pointer;
using pointer = __rebind_pointer_t<_NodePtr, value_type>;

_LIBCPP_HIDE_FROM_ABI __hash_local_iterator() _NOEXCEPT : __node_(nullptr) {}

Expand Down Expand Up @@ -465,9 +447,9 @@ public:

typedef forward_iterator_tag iterator_category;
typedef typename _NodeTypes::__node_value_type value_type;
typedef typename _NodeTypes::difference_type difference_type;
using difference_type = ptrdiff_t;
typedef const value_type& reference;
typedef typename _NodeTypes::__const_node_value_type_pointer pointer;
using pointer = __rebind_pointer_t<_ConstNodePtr, const value_type>;

_LIBCPP_HIDE_FROM_ABI __hash_const_local_iterator() _NOEXCEPT : __node_(nullptr) {}

Expand Down Expand Up @@ -646,33 +628,32 @@ public:

private:
typedef allocator_traits<allocator_type> __alloc_traits;
typedef typename __make_hash_node_types<_Tp, typename __alloc_traits::void_pointer>::type _NodeTypes;

public:
typedef typename _NodeTypes::__node_value_type __node_value_type;
typedef value_type& reference;
typedef const value_type& const_reference;
typedef typename __alloc_traits::pointer pointer;
typedef typename __alloc_traits::const_pointer const_pointer;
#ifndef _LIBCPP_ABI_FIX_UNORDERED_CONTAINER_SIZE_TYPE
typedef typename __alloc_traits::size_type size_type;
#else
typedef typename _NodeTypes::size_type size_type;
using size_type = size_t;
#endif
typedef typename _NodeTypes::difference_type difference_type;
using difference_type = ptrdiff_t;

public:
// Create __node

typedef typename _NodeTypes::__node_type __node;
typedef __rebind_alloc<__alloc_traits, __node> __node_allocator;
typedef allocator_traits<__node_allocator> __node_traits;
typedef typename _NodeTypes::__void_pointer __void_pointer;
typedef typename _NodeTypes::__node_pointer __node_pointer;
typedef typename _NodeTypes::__node_pointer __node_const_pointer;
typedef typename _NodeTypes::__node_base_type __first_node;
typedef typename _NodeTypes::__node_base_pointer __node_base_pointer;
typedef typename _NodeTypes::__next_pointer __next_pointer;
using __void_pointer _LIBCPP_NODEBUG = typename __alloc_traits::void_pointer;

using __node _LIBCPP_NODEBUG = __hash_node<_Tp, __void_pointer>;
using __node_allocator _LIBCPP_NODEBUG = __rebind_alloc<__alloc_traits, __node>;
using __node_traits _LIBCPP_NODEBUG = allocator_traits<__node_allocator>;
using __node_pointer _LIBCPP_NODEBUG = __rebind_pointer_t<__void_pointer, __node>;

using __first_node _LIBCPP_NODEBUG = __hash_node_base<__node_pointer>;
using __node_base_pointer _LIBCPP_NODEBUG = __rebind_pointer_t<__void_pointer, __first_node>;
using __next_pointer _LIBCPP_NODEBUG = __node_base_pointer;

private:
// check for sane allocator pointer rebinding semantics. Rebinding the
Expand Down
3 changes: 0 additions & 3 deletions libcxx/include/ext/hash_map
Original file line number Diff line number Diff line change
Expand Up @@ -467,8 +467,6 @@ private:

__table __table_;

typedef typename __table::__node_pointer __node_pointer;
typedef typename __table::__node_const_pointer __node_const_pointer;
typedef typename __table::__node_traits __node_traits;
typedef typename __table::__node_allocator __node_allocator;
typedef typename __table::__node __node;
Expand Down Expand Up @@ -693,7 +691,6 @@ private:

__table __table_;

typedef typename __table::__node_traits __node_traits;
typedef typename __table::__node_allocator __node_allocator;
typedef typename __table::__node __node;
typedef __hash_map_node_destructor<__node_allocator> _Dp;
Expand Down
15 changes: 4 additions & 11 deletions libcxx/include/unordered_map
Original file line number Diff line number Diff line change
Expand Up @@ -844,8 +844,8 @@ class __hash_map_iterator {

public:
typedef forward_iterator_tag iterator_category;
using value_type = typename _HashIterator::value_type;
typedef typename _NodeTypes::difference_type difference_type;
using value_type = typename _HashIterator::value_type;
using difference_type = ptrdiff_t;
typedef value_type& reference;
using pointer = typename _HashIterator::pointer;

Expand Down Expand Up @@ -895,8 +895,8 @@ class __hash_map_const_iterator {

public:
typedef forward_iterator_tag iterator_category;
using value_type = typename _HashIterator::value_type;
typedef typename _NodeTypes::difference_type difference_type;
using value_type = typename _HashIterator::value_type;
using difference_type = ptrdiff_t;
typedef const value_type& reference;
using pointer = typename _HashIterator::pointer;

Expand Down Expand Up @@ -972,9 +972,6 @@ private:

__table __table_;

typedef typename __table::_NodeTypes _NodeTypes;
typedef typename __table::__node_pointer __node_pointer;
typedef typename __table::__node_const_pointer __node_const_pointer;
typedef typename __table::__node_traits __node_traits;
typedef typename __table::__node_allocator __node_allocator;
typedef typename __table::__node __node;
Expand Down Expand Up @@ -1743,12 +1740,8 @@ private:

__table __table_;

typedef typename __table::_NodeTypes _NodeTypes;
typedef typename __table::__node_traits __node_traits;
typedef typename __table::__node_allocator __node_allocator;
typedef typename __table::__node __node;
typedef __hash_map_node_destructor<__node_allocator> _Dp;
typedef unique_ptr<__node, _Dp> __node_holder;
typedef allocator_traits<allocator_type> __alloc_traits;
static_assert(is_same<typename __node_traits::size_type, typename __alloc_traits::size_type>::value,
"Allocator uses different size_type for different types");
Expand Down
Loading