Link Here
|
|
|
1 |
--- map-fix/__tree.orig 2015-11-10 21:58:57.802092405 -0800 |
2 |
+++ map-fix/__tree 2015-11-10 21:59:00.724090284 -0800 |
3 |
@@ -622,8 +622,6 @@ |
4 |
{ |
5 |
typedef _NodePtr __node_pointer; |
6 |
typedef typename pointer_traits<__node_pointer>::element_type __node; |
7 |
- typedef typename __node::base __node_base; |
8 |
- typedef typename __node_base::pointer __node_base_pointer; |
9 |
|
10 |
__node_pointer __ptr_; |
11 |
|
12 |
@@ -652,17 +650,21 @@ |
13 |
{return pointer_traits<pointer>::pointer_to(__ptr_->__value_);} |
14 |
|
15 |
_LIBCPP_INLINE_VISIBILITY |
16 |
- __tree_iterator& operator++() |
17 |
- {__ptr_ = static_cast<__node_pointer>(__tree_next(static_cast<__node_base_pointer>(__ptr_))); |
18 |
- return *this;} |
19 |
+ __tree_iterator& operator++() { |
20 |
+ __ptr_ = static_cast<__node_pointer>( |
21 |
+ __tree_next(static_cast<typename __node::base::pointer>(__ptr_))); |
22 |
+ return *this; |
23 |
+ } |
24 |
_LIBCPP_INLINE_VISIBILITY |
25 |
__tree_iterator operator++(int) |
26 |
{__tree_iterator __t(*this); ++(*this); return __t;} |
27 |
|
28 |
_LIBCPP_INLINE_VISIBILITY |
29 |
- __tree_iterator& operator--() |
30 |
- {__ptr_ = static_cast<__node_pointer>(__tree_prev(static_cast<__node_base_pointer>(__ptr_))); |
31 |
- return *this;} |
32 |
+ __tree_iterator& operator--() { |
33 |
+ __ptr_ = static_cast<__node_pointer>( |
34 |
+ __tree_prev(static_cast<typename __node::base::pointer>(__ptr_))); |
35 |
+ return *this; |
36 |
+ } |
37 |
_LIBCPP_INLINE_VISIBILITY |
38 |
__tree_iterator operator--(int) |
39 |
{__tree_iterator __t(*this); --(*this); return __t;} |
40 |
@@ -691,14 +693,6 @@ |
41 |
{ |
42 |
typedef _ConstNodePtr __node_pointer; |
43 |
typedef typename pointer_traits<__node_pointer>::element_type __node; |
44 |
- typedef typename __node::base __node_base; |
45 |
- typedef typename pointer_traits<__node_pointer>::template |
46 |
-#ifndef _LIBCPP_HAS_NO_TEMPLATE_ALIASES |
47 |
- rebind<__node_base> |
48 |
-#else |
49 |
- rebind<__node_base>::other |
50 |
-#endif |
51 |
- __node_base_pointer; |
52 |
|
53 |
__node_pointer __ptr_; |
54 |
|
55 |
@@ -743,17 +737,39 @@ |
56 |
{return pointer_traits<pointer>::pointer_to(__ptr_->__value_);} |
57 |
|
58 |
_LIBCPP_INLINE_VISIBILITY |
59 |
- __tree_const_iterator& operator++() |
60 |
- {__ptr_ = static_cast<__node_pointer>(__tree_next(static_cast<__node_base_pointer>(__ptr_))); |
61 |
- return *this;} |
62 |
+ __tree_const_iterator& operator++() { |
63 |
+ typedef typename pointer_traits<__node_pointer>::template |
64 |
+#ifndef _LIBCPP_HAS_NO_TEMPLATE_ALIASES |
65 |
+ rebind<typename __node::base> |
66 |
+#else |
67 |
+ rebind<typename __node::base>::other |
68 |
+#endif |
69 |
+ __node_base_pointer; |
70 |
+ |
71 |
+ __ptr_ = static_cast<__node_pointer>( |
72 |
+ __tree_next(static_cast<__node_base_pointer>(__ptr_))); |
73 |
+ return *this; |
74 |
+ } |
75 |
+ |
76 |
_LIBCPP_INLINE_VISIBILITY |
77 |
__tree_const_iterator operator++(int) |
78 |
{__tree_const_iterator __t(*this); ++(*this); return __t;} |
79 |
|
80 |
_LIBCPP_INLINE_VISIBILITY |
81 |
- __tree_const_iterator& operator--() |
82 |
- {__ptr_ = static_cast<__node_pointer>(__tree_prev(static_cast<__node_base_pointer>(__ptr_))); |
83 |
- return *this;} |
84 |
+ __tree_const_iterator& operator--() { |
85 |
+ typedef typename pointer_traits<__node_pointer>::template |
86 |
+#ifndef _LIBCPP_HAS_NO_TEMPLATE_ALIASES |
87 |
+ rebind<typename __node::base> |
88 |
+#else |
89 |
+ rebind<typename __node::base>::other |
90 |
+#endif |
91 |
+ __node_base_pointer; |
92 |
+ |
93 |
+ __ptr_ = static_cast<__node_pointer>( |
94 |
+ __tree_prev(static_cast<__node_base_pointer>(__ptr_))); |
95 |
+ return *this; |
96 |
+ } |
97 |
+ |
98 |
_LIBCPP_INLINE_VISIBILITY |
99 |
__tree_const_iterator operator--(int) |
100 |
{__tree_const_iterator __t(*this); --(*this); return __t;} |
101 |
--- map-fix/map.orig 2015-11-10 21:24:49.362267208 -0800 |
102 |
+++ map-fix/map 2015-11-10 21:25:09.501230487 -0800 |
103 |
@@ -644,14 +644,25 @@ |
104 |
|
105 |
#endif |
106 |
|
107 |
+template <class _Tp> |
108 |
+struct __extract_key_value_types; |
109 |
+ |
110 |
+template <class _Key, class _Tp> |
111 |
+struct __extract_key_value_types<__value_type<_Key, _Tp> > |
112 |
+{ |
113 |
+ typedef _Key const __key_type; |
114 |
+ typedef _Tp __mapped_type; |
115 |
+}; |
116 |
+ |
117 |
template <class _TreeIterator> |
118 |
class _LIBCPP_TYPE_VIS_ONLY __map_iterator |
119 |
{ |
120 |
_TreeIterator __i_; |
121 |
|
122 |
typedef typename _TreeIterator::__pointer_traits __pointer_traits; |
123 |
- typedef const typename _TreeIterator::value_type::value_type::first_type __key_type; |
124 |
- typedef typename _TreeIterator::value_type::value_type::second_type __mapped_type; |
125 |
+ typedef typename _TreeIterator::value_type __value_type; |
126 |
+ typedef typename __extract_key_value_types<__value_type>::__key_type __key_type; |
127 |
+ typedef typename __extract_key_value_types<__value_type>::__mapped_type __mapped_type; |
128 |
public: |
129 |
typedef bidirectional_iterator_tag iterator_category; |
130 |
typedef pair<__key_type, __mapped_type> value_type; |
131 |
@@ -715,8 +726,9 @@ |
132 |
_TreeIterator __i_; |
133 |
|
134 |
typedef typename _TreeIterator::__pointer_traits __pointer_traits; |
135 |
- typedef const typename _TreeIterator::value_type::value_type::first_type __key_type; |
136 |
- typedef typename _TreeIterator::value_type::value_type::second_type __mapped_type; |
137 |
+ typedef typename _TreeIterator::value_type __value_type; |
138 |
+ typedef typename __extract_key_value_types<__value_type>::__key_type __key_type; |
139 |
+ typedef typename __extract_key_value_types<__value_type>::__mapped_type __mapped_type; |
140 |
public: |
141 |
typedef bidirectional_iterator_tag iterator_category; |
142 |
typedef pair<__key_type, __mapped_type> value_type; |
143 |
@@ -736,10 +748,9 @@ |
144 |
_LIBCPP_INLINE_VISIBILITY |
145 |
__map_const_iterator(_TreeIterator __i) _NOEXCEPT : __i_(__i) {} |
146 |
_LIBCPP_INLINE_VISIBILITY |
147 |
- __map_const_iterator( |
148 |
- __map_iterator<typename _TreeIterator::__non_const_iterator> __i) |
149 |
- _NOEXCEPT |
150 |
- : __i_(__i.__i_) {} |
151 |
+ __map_const_iterator(__map_iterator< |
152 |
+ typename _TreeIterator::__non_const_iterator> __i) _NOEXCEPT |
153 |
+ : __i_(__i.__i_) {} |
154 |
|
155 |
_LIBCPP_INLINE_VISIBILITY |
156 |
reference operator*() const {return __i_->__cc;} |
157 |
@@ -829,7 +840,7 @@ |
158 |
typedef typename __alloc_traits::const_pointer const_pointer; |
159 |
typedef typename __alloc_traits::size_type size_type; |
160 |
typedef typename __alloc_traits::difference_type difference_type; |
161 |
- typedef __map_iterator<typename __base::iterator> iterator; |
162 |
+ typedef __map_iterator<typename __base::iterator> iterator; |
163 |
typedef __map_const_iterator<typename __base::const_iterator> const_iterator; |
164 |
typedef _VSTD::reverse_iterator<iterator> reverse_iterator; |
165 |
typedef _VSTD::reverse_iterator<const_iterator> const_reverse_iterator; |