@@ -594,8 +594,6 @@ template <class _NodePtr, class _Tp, class _VoidPtr>
594594struct __tree_node_types <_NodePtr, __tree_node<_Tp, _VoidPtr> >
595595 : public __tree_node_base_types<_VoidPtr>, __tree_key_value_types<_Tp>, __tree_map_pointer_types<_Tp, _VoidPtr> {
596596 typedef __tree_node_base_types<_VoidPtr> __base;
597- typedef __tree_key_value_types<_Tp> __key_base;
598- typedef __tree_map_pointer_types<_Tp, _VoidPtr> __map_pointer_base;
599597
600598public:
601599 typedef typename pointer_traits<_NodePtr>::element_type __node_type;
@@ -604,7 +602,6 @@ public:
604602 typedef _Tp __node_value_type;
605603 typedef __rebind_pointer_t <_VoidPtr, __node_value_type> __node_value_type_pointer;
606604 typedef __rebind_pointer_t <_VoidPtr, const __node_value_type> __const_node_value_type_pointer;
607- typedef typename __base::__end_node_pointer __iter_pointer;
608605
609606private:
610607 static_assert (!is_const<__node_type>::value, " _NodePtr should never be a pointer to const" );
@@ -712,10 +709,9 @@ class __tree_iterator {
712709 typedef _NodePtr __node_pointer;
713710 typedef typename _NodeTypes::__node_base_pointer __node_base_pointer;
714711 typedef typename _NodeTypes::__end_node_pointer __end_node_pointer;
715- typedef typename _NodeTypes::__iter_pointer __iter_pointer;
716712 typedef pointer_traits<__node_pointer> __pointer_traits;
717713
718- __iter_pointer __ptr_;
714+ __end_node_pointer __ptr_;
719715
720716public:
721717 typedef bidirectional_iterator_tag iterator_category;
@@ -735,8 +731,7 @@ public:
735731 _LIBCPP_HIDE_FROM_ABI pointer operator ->() const { return pointer_traits<pointer>::pointer_to (__get_np ()->__value_ ); }
736732
737733 _LIBCPP_HIDE_FROM_ABI __tree_iterator& operator ++() {
738- __ptr_ = static_cast <__iter_pointer>(
739- std::__tree_next_iter<__end_node_pointer>(static_cast <__node_base_pointer>(__ptr_)));
734+ __ptr_ = std::__tree_next_iter<__end_node_pointer>(static_cast <__node_base_pointer>(__ptr_));
740735 return *this ;
741736 }
742737 _LIBCPP_HIDE_FROM_ABI __tree_iterator operator ++(int ) {
@@ -746,8 +741,7 @@ public:
746741 }
747742
748743 _LIBCPP_HIDE_FROM_ABI __tree_iterator& operator --() {
749- __ptr_ = static_cast <__iter_pointer>(
750- std::__tree_prev_iter<__node_base_pointer>(static_cast <__end_node_pointer>(__ptr_)));
744+ __ptr_ = static_cast <__end_node_pointer>(std::__tree_prev_iter<__node_base_pointer>(__ptr_));
751745 return *this ;
752746 }
753747 _LIBCPP_HIDE_FROM_ABI __tree_iterator operator --(int ) {
@@ -789,10 +783,9 @@ class __tree_const_iterator {
789783 typedef typename _NodeTypes::__node_pointer __node_pointer;
790784 typedef typename _NodeTypes::__node_base_pointer __node_base_pointer;
791785 typedef typename _NodeTypes::__end_node_pointer __end_node_pointer;
792- typedef typename _NodeTypes::__iter_pointer __iter_pointer;
793786 typedef pointer_traits<__node_pointer> __pointer_traits;
794787
795- __iter_pointer __ptr_;
788+ __end_node_pointer __ptr_;
796789
797790public:
798791 typedef bidirectional_iterator_tag iterator_category;
@@ -818,8 +811,7 @@ public:
818811 _LIBCPP_HIDE_FROM_ABI pointer operator ->() const { return pointer_traits<pointer>::pointer_to (__get_np ()->__value_ ); }
819812
820813 _LIBCPP_HIDE_FROM_ABI __tree_const_iterator& operator ++() {
821- __ptr_ = static_cast <__iter_pointer>(
822- std::__tree_next_iter<__end_node_pointer>(static_cast <__node_base_pointer>(__ptr_)));
814+ __ptr_ = std::__tree_next_iter<__end_node_pointer>(static_cast <__node_base_pointer>(__ptr_));
823815 return *this ;
824816 }
825817
@@ -830,8 +822,7 @@ public:
830822 }
831823
832824 _LIBCPP_HIDE_FROM_ABI __tree_const_iterator& operator --() {
833- __ptr_ = static_cast <__iter_pointer>(
834- std::__tree_prev_iter<__node_base_pointer>(static_cast <__end_node_pointer>(__ptr_)));
825+ __ptr_ = static_cast <__end_node_pointer>(std::__tree_prev_iter<__node_base_pointer>(__ptr_));
835826 return *this ;
836827 }
837828
@@ -906,9 +897,9 @@ public:
906897
907898 typedef typename _NodeTypes::__end_node_type __end_node_t ;
908899 typedef typename _NodeTypes::__end_node_pointer __end_node_ptr;
900+ using __end_node_pointer _LIBCPP_NODEBUG = typename _NodeTypes::__end_node_pointer;
909901
910902 typedef typename _NodeTypes::__parent_pointer __parent_pointer;
911- typedef typename _NodeTypes::__iter_pointer __iter_pointer;
912903
913904 typedef __rebind_alloc<__alloc_traits, __node> __node_allocator;
914905 typedef allocator_traits<__node_allocator> __node_traits;
@@ -925,24 +916,23 @@ private:
925916 " Allocator does not rebind pointers in a sane manner." );
926917
927918private:
928- __iter_pointer __begin_node_;
919+ __end_node_pointer __begin_node_;
929920 _LIBCPP_COMPRESSED_PAIR (__end_node_t , __end_node_, __node_allocator, __node_alloc_);
930921 _LIBCPP_COMPRESSED_PAIR (size_type, __size_, value_compare, __value_comp_);
931922
932923public:
933- _LIBCPP_HIDE_FROM_ABI __iter_pointer __end_node () _NOEXCEPT {
934- return static_cast <__iter_pointer>( pointer_traits<__end_node_ptr >::pointer_to (__end_node_) );
924+ _LIBCPP_HIDE_FROM_ABI __end_node_pointer __end_node () _NOEXCEPT {
925+ return pointer_traits<__end_node_pointer >::pointer_to (__end_node_);
935926 }
936- _LIBCPP_HIDE_FROM_ABI __iter_pointer __end_node () const _NOEXCEPT {
937- return static_cast <__iter_pointer>(
938- pointer_traits<__end_node_ptr>::pointer_to (const_cast <__end_node_t &>(__end_node_)));
927+ _LIBCPP_HIDE_FROM_ABI __end_node_pointer __end_node () const _NOEXCEPT {
928+ return pointer_traits<__end_node_pointer>::pointer_to (const_cast <__end_node_t &>(__end_node_));
939929 }
940930 _LIBCPP_HIDE_FROM_ABI __node_allocator& __node_alloc () _NOEXCEPT { return __node_alloc_; }
941931
942932private:
943933 _LIBCPP_HIDE_FROM_ABI const __node_allocator& __node_alloc () const _NOEXCEPT { return __node_alloc_; }
944- _LIBCPP_HIDE_FROM_ABI __iter_pointer & __begin_node () _NOEXCEPT { return __begin_node_; }
945- _LIBCPP_HIDE_FROM_ABI const __iter_pointer & __begin_node () const _NOEXCEPT { return __begin_node_; }
934+ _LIBCPP_HIDE_FROM_ABI __end_node_pointer & __begin_node () _NOEXCEPT { return __begin_node_; }
935+ _LIBCPP_HIDE_FROM_ABI const __end_node_pointer & __begin_node () const _NOEXCEPT { return __begin_node_; }
946936
947937public:
948938 _LIBCPP_HIDE_FROM_ABI allocator_type __alloc () const _NOEXCEPT { return allocator_type (__node_alloc ()); }
@@ -1189,27 +1179,27 @@ public:
11891179 return __lower_bound (__v, __root (), __end_node ());
11901180 }
11911181 template <class _Key >
1192- _LIBCPP_HIDE_FROM_ABI iterator __lower_bound (const _Key& __v, __node_pointer __root, __iter_pointer __result);
1182+ _LIBCPP_HIDE_FROM_ABI iterator __lower_bound (const _Key& __v, __node_pointer __root, __end_node_pointer __result);
11931183 template <class _Key >
11941184 _LIBCPP_HIDE_FROM_ABI const_iterator lower_bound (const _Key& __v) const {
11951185 return __lower_bound (__v, __root (), __end_node ());
11961186 }
11971187 template <class _Key >
11981188 _LIBCPP_HIDE_FROM_ABI const_iterator
1199- __lower_bound (const _Key& __v, __node_pointer __root, __iter_pointer __result) const ;
1189+ __lower_bound (const _Key& __v, __node_pointer __root, __end_node_pointer __result) const ;
12001190 template <class _Key >
12011191 _LIBCPP_HIDE_FROM_ABI iterator upper_bound (const _Key& __v) {
12021192 return __upper_bound (__v, __root (), __end_node ());
12031193 }
12041194 template <class _Key >
1205- _LIBCPP_HIDE_FROM_ABI iterator __upper_bound (const _Key& __v, __node_pointer __root, __iter_pointer __result);
1195+ _LIBCPP_HIDE_FROM_ABI iterator __upper_bound (const _Key& __v, __node_pointer __root, __end_node_pointer __result);
12061196 template <class _Key >
12071197 _LIBCPP_HIDE_FROM_ABI const_iterator upper_bound (const _Key& __v) const {
12081198 return __upper_bound (__v, __root (), __end_node ());
12091199 }
12101200 template <class _Key >
12111201 _LIBCPP_HIDE_FROM_ABI const_iterator
1212- __upper_bound (const _Key& __v, __node_pointer __root, __iter_pointer __result) const ;
1202+ __upper_bound (const _Key& __v, __node_pointer __root, __end_node_pointer __result) const ;
12131203 template <class _Key >
12141204 _LIBCPP_HIDE_FROM_ABI pair<iterator, iterator> __equal_range_unique (const _Key& __k);
12151205 template <class _Key >
@@ -1323,13 +1313,13 @@ __tree<_Tp, _Compare, _Allocator>::__tree(const value_compare& __comp) _NOEXCEPT
13231313
13241314template <class _Tp , class _Compare , class _Allocator >
13251315__tree<_Tp, _Compare, _Allocator>::__tree(const allocator_type& __a)
1326- : __begin_node_(__iter_pointer() ), __node_alloc_(__node_allocator(__a)), __size_(0 ) {
1316+ : __begin_node_(), __node_alloc_(__node_allocator(__a)), __size_(0 ) {
13271317 __begin_node () = __end_node ();
13281318}
13291319
13301320template <class _Tp , class _Compare , class _Allocator >
13311321__tree<_Tp, _Compare, _Allocator>::__tree(const value_compare& __comp, const allocator_type& __a)
1332- : __begin_node_(__iter_pointer() ), __node_alloc_(__node_allocator(__a)), __size_(0 ), __value_comp_(__comp) {
1322+ : __begin_node_(), __node_alloc_(__node_allocator(__a)), __size_(0 ), __value_comp_(__comp) {
13331323 __begin_node () = __end_node ();
13341324}
13351325
@@ -1427,7 +1417,7 @@ void __tree<_Tp, _Compare, _Allocator>::__assign_multi(_InputIterator __first, _
14271417
14281418template <class _Tp , class _Compare , class _Allocator >
14291419__tree<_Tp, _Compare, _Allocator>::__tree(const __tree& __t )
1430- : __begin_node_(__iter_pointer() ),
1420+ : __begin_node_(),
14311421 __node_alloc_ (__node_traits::select_on_container_copy_construction(__t .__node_alloc())),
14321422 __size_(0 ),
14331423 __value_comp_(__t .value_comp()) {
@@ -1758,7 +1748,7 @@ void __tree<_Tp, _Compare, _Allocator>::__insert_node_at(
17581748 // __new_node->__is_black_ is initialized in __tree_balance_after_insert
17591749 __child = __new_node;
17601750 if (__begin_node ()->__left_ != nullptr )
1761- __begin_node () = static_cast <__iter_pointer >(__begin_node ()->__left_ );
1751+ __begin_node () = static_cast <__end_node_pointer >(__begin_node ()->__left_ );
17621752 std::__tree_balance_after_insert (__end_node ()->__left_ , __child);
17631753 ++size ();
17641754}
@@ -2110,17 +2100,17 @@ template <class _Tp, class _Compare, class _Allocator>
21102100template <class _Key >
21112101typename __tree<_Tp, _Compare, _Allocator>::size_type
21122102__tree<_Tp, _Compare, _Allocator>::__count_multi(const _Key& __k) const {
2113- __iter_pointer __result = __end_node ();
2114- __node_pointer __rt = __root ();
2103+ __end_node_pointer __result = __end_node ();
2104+ __node_pointer __rt = __root ();
21152105 while (__rt != nullptr ) {
21162106 if (value_comp ()(__k, __rt->__value_ )) {
2117- __result = static_cast <__iter_pointer >(__rt);
2107+ __result = static_cast <__end_node_pointer >(__rt);
21182108 __rt = static_cast <__node_pointer>(__rt->__left_ );
21192109 } else if (value_comp ()(__rt->__value_ , __k))
21202110 __rt = static_cast <__node_pointer>(__rt->__right_ );
21212111 else
21222112 return std::distance (
2123- __lower_bound (__k, static_cast <__node_pointer>(__rt->__left_ ), static_cast <__iter_pointer >(__rt)),
2113+ __lower_bound (__k, static_cast <__node_pointer>(__rt->__left_ ), static_cast <__end_node_pointer >(__rt)),
21242114 __upper_bound (__k, static_cast <__node_pointer>(__rt->__right_ ), __result));
21252115 }
21262116 return 0 ;
@@ -2129,10 +2119,10 @@ __tree<_Tp, _Compare, _Allocator>::__count_multi(const _Key& __k) const {
21292119template <class _Tp , class _Compare , class _Allocator >
21302120template <class _Key >
21312121typename __tree<_Tp, _Compare, _Allocator>::iterator
2132- __tree<_Tp, _Compare, _Allocator>::__lower_bound(const _Key& __v, __node_pointer __root, __iter_pointer __result) {
2122+ __tree<_Tp, _Compare, _Allocator>::__lower_bound(const _Key& __v, __node_pointer __root, __end_node_pointer __result) {
21332123 while (__root != nullptr ) {
21342124 if (!value_comp ()(__root->__value_ , __v)) {
2135- __result = static_cast <__iter_pointer >(__root);
2125+ __result = static_cast <__end_node_pointer >(__root);
21362126 __root = static_cast <__node_pointer>(__root->__left_ );
21372127 } else
21382128 __root = static_cast <__node_pointer>(__root->__right_ );
@@ -2143,10 +2133,10 @@ __tree<_Tp, _Compare, _Allocator>::__lower_bound(const _Key& __v, __node_pointer
21432133template <class _Tp , class _Compare , class _Allocator >
21442134template <class _Key >
21452135typename __tree<_Tp, _Compare, _Allocator>::const_iterator __tree<_Tp, _Compare, _Allocator>::__lower_bound(
2146- const _Key& __v, __node_pointer __root, __iter_pointer __result) const {
2136+ const _Key& __v, __node_pointer __root, __end_node_pointer __result) const {
21472137 while (__root != nullptr ) {
21482138 if (!value_comp ()(__root->__value_ , __v)) {
2149- __result = static_cast <__iter_pointer >(__root);
2139+ __result = static_cast <__end_node_pointer >(__root);
21502140 __root = static_cast <__node_pointer>(__root->__left_ );
21512141 } else
21522142 __root = static_cast <__node_pointer>(__root->__right_ );
@@ -2157,10 +2147,10 @@ typename __tree<_Tp, _Compare, _Allocator>::const_iterator __tree<_Tp, _Compare,
21572147template <class _Tp , class _Compare , class _Allocator >
21582148template <class _Key >
21592149typename __tree<_Tp, _Compare, _Allocator>::iterator
2160- __tree<_Tp, _Compare, _Allocator>::__upper_bound(const _Key& __v, __node_pointer __root, __iter_pointer __result) {
2150+ __tree<_Tp, _Compare, _Allocator>::__upper_bound(const _Key& __v, __node_pointer __root, __end_node_pointer __result) {
21612151 while (__root != nullptr ) {
21622152 if (value_comp ()(__v, __root->__value_ )) {
2163- __result = static_cast <__iter_pointer >(__root);
2153+ __result = static_cast <__end_node_pointer >(__root);
21642154 __root = static_cast <__node_pointer>(__root->__left_ );
21652155 } else
21662156 __root = static_cast <__node_pointer>(__root->__right_ );
@@ -2171,10 +2161,10 @@ __tree<_Tp, _Compare, _Allocator>::__upper_bound(const _Key& __v, __node_pointer
21712161template <class _Tp , class _Compare , class _Allocator >
21722162template <class _Key >
21732163typename __tree<_Tp, _Compare, _Allocator>::const_iterator __tree<_Tp, _Compare, _Allocator>::__upper_bound(
2174- const _Key& __v, __node_pointer __root, __iter_pointer __result) const {
2164+ const _Key& __v, __node_pointer __root, __end_node_pointer __result) const {
21752165 while (__root != nullptr ) {
21762166 if (value_comp ()(__v, __root->__value_ )) {
2177- __result = static_cast <__iter_pointer >(__root);
2167+ __result = static_cast <__end_node_pointer >(__root);
21782168 __root = static_cast <__node_pointer>(__root->__left_ );
21792169 } else
21802170 __root = static_cast <__node_pointer>(__root->__right_ );
@@ -2187,17 +2177,17 @@ template <class _Key>
21872177pair<typename __tree<_Tp, _Compare, _Allocator>::iterator, typename __tree<_Tp, _Compare, _Allocator>::iterator>
21882178__tree<_Tp, _Compare, _Allocator>::__equal_range_unique(const _Key& __k) {
21892179 typedef pair<iterator, iterator> _Pp;
2190- __iter_pointer __result = __end_node ();
2191- __node_pointer __rt = __root ();
2180+ __end_node_pointer __result = __end_node ();
2181+ __node_pointer __rt = __root ();
21922182 while (__rt != nullptr ) {
21932183 if (value_comp ()(__k, __rt->__value_ )) {
2194- __result = static_cast <__iter_pointer >(__rt);
2184+ __result = static_cast <__end_node_pointer >(__rt);
21952185 __rt = static_cast <__node_pointer>(__rt->__left_ );
21962186 } else if (value_comp ()(__rt->__value_ , __k))
21972187 __rt = static_cast <__node_pointer>(__rt->__right_ );
21982188 else
21992189 return _Pp (iterator (__rt),
2200- iterator (__rt->__right_ != nullptr ? static_cast <__iter_pointer >(std::__tree_min (__rt->__right_ ))
2190+ iterator (__rt->__right_ != nullptr ? static_cast <__end_node_pointer >(std::__tree_min (__rt->__right_ ))
22012191 : __result));
22022192 }
22032193 return _Pp (iterator (__result), iterator (__result));
@@ -2209,19 +2199,19 @@ pair<typename __tree<_Tp, _Compare, _Allocator>::const_iterator,
22092199 typename __tree<_Tp, _Compare, _Allocator>::const_iterator>
22102200__tree<_Tp, _Compare, _Allocator>::__equal_range_unique(const _Key& __k) const {
22112201 typedef pair<const_iterator, const_iterator> _Pp;
2212- __iter_pointer __result = __end_node ();
2213- __node_pointer __rt = __root ();
2202+ __end_node_pointer __result = __end_node ();
2203+ __node_pointer __rt = __root ();
22142204 while (__rt != nullptr ) {
22152205 if (value_comp ()(__k, __rt->__value_ )) {
2216- __result = static_cast <__iter_pointer >(__rt);
2206+ __result = static_cast <__end_node_pointer >(__rt);
22172207 __rt = static_cast <__node_pointer>(__rt->__left_ );
22182208 } else if (value_comp ()(__rt->__value_ , __k))
22192209 __rt = static_cast <__node_pointer>(__rt->__right_ );
22202210 else
22212211 return _Pp (
22222212 const_iterator (__rt),
22232213 const_iterator (
2224- __rt->__right_ != nullptr ? static_cast <__iter_pointer >(std::__tree_min (__rt->__right_ )) : __result));
2214+ __rt->__right_ != nullptr ? static_cast <__end_node_pointer >(std::__tree_min (__rt->__right_ )) : __result));
22252215 }
22262216 return _Pp (const_iterator (__result), const_iterator (__result));
22272217}
@@ -2231,16 +2221,16 @@ template <class _Key>
22312221pair<typename __tree<_Tp, _Compare, _Allocator>::iterator, typename __tree<_Tp, _Compare, _Allocator>::iterator>
22322222__tree<_Tp, _Compare, _Allocator>::__equal_range_multi(const _Key& __k) {
22332223 typedef pair<iterator, iterator> _Pp;
2234- __iter_pointer __result = __end_node ();
2224+ __end_node_pointer __result = __end_node ();
22352225 __node_pointer __rt = __root ();
22362226 while (__rt != nullptr ) {
22372227 if (value_comp ()(__k, __rt->__value_ )) {
2238- __result = static_cast <__iter_pointer >(__rt);
2228+ __result = static_cast <__end_node_pointer >(__rt);
22392229 __rt = static_cast <__node_pointer>(__rt->__left_ );
22402230 } else if (value_comp ()(__rt->__value_ , __k))
22412231 __rt = static_cast <__node_pointer>(__rt->__right_ );
22422232 else
2243- return _Pp (__lower_bound (__k, static_cast <__node_pointer>(__rt->__left_ ), static_cast <__iter_pointer >(__rt)),
2233+ return _Pp (__lower_bound (__k, static_cast <__node_pointer>(__rt->__left_ ), static_cast <__end_node_pointer >(__rt)),
22442234 __upper_bound (__k, static_cast <__node_pointer>(__rt->__right_ ), __result));
22452235 }
22462236 return _Pp (iterator (__result), iterator (__result));
@@ -2252,16 +2242,16 @@ pair<typename __tree<_Tp, _Compare, _Allocator>::const_iterator,
22522242 typename __tree<_Tp, _Compare, _Allocator>::const_iterator>
22532243__tree<_Tp, _Compare, _Allocator>::__equal_range_multi(const _Key& __k) const {
22542244 typedef pair<const_iterator, const_iterator> _Pp;
2255- __iter_pointer __result = __end_node ();
2245+ __end_node_pointer __result = __end_node ();
22562246 __node_pointer __rt = __root ();
22572247 while (__rt != nullptr ) {
22582248 if (value_comp ()(__k, __rt->__value_ )) {
2259- __result = static_cast <__iter_pointer >(__rt);
2249+ __result = static_cast <__end_node_pointer >(__rt);
22602250 __rt = static_cast <__node_pointer>(__rt->__left_ );
22612251 } else if (value_comp ()(__rt->__value_ , __k))
22622252 __rt = static_cast <__node_pointer>(__rt->__right_ );
22632253 else
2264- return _Pp (__lower_bound (__k, static_cast <__node_pointer>(__rt->__left_ ), static_cast <__iter_pointer >(__rt)),
2254+ return _Pp (__lower_bound (__k, static_cast <__node_pointer>(__rt->__left_ ), static_cast <__end_node_pointer >(__rt)),
22652255 __upper_bound (__k, static_cast <__node_pointer>(__rt->__right_ ), __result));
22662256 }
22672257 return _Pp (const_iterator (__result), const_iterator (__result));
@@ -2273,9 +2263,9 @@ __tree<_Tp, _Compare, _Allocator>::remove(const_iterator __p) _NOEXCEPT {
22732263 __node_pointer __np = __p.__get_np ();
22742264 if (__begin_node () == __p.__ptr_ ) {
22752265 if (__np->__right_ != nullptr )
2276- __begin_node () = static_cast <__iter_pointer >(__np->__right_ );
2266+ __begin_node () = static_cast <__end_node_pointer >(__np->__right_ );
22772267 else
2278- __begin_node () = static_cast <__iter_pointer >(__np->__parent_ );
2268+ __begin_node () = static_cast <__end_node_pointer >(__np->__parent_ );
22792269 }
22802270 --size ();
22812271 std::__tree_remove (__end_node ()->__left_ , static_cast <__node_base_pointer>(__np));
0 commit comments