Let's discuss this tomorrow. Otherwise, this will be the first instance of a backout request for unapproved checkin Sun
On Wed, Jun 8, 2011 at 8:37 AM, Shin-Ming Liu <shinm...@gmail.com> wrote: > Ditto. > > Shin > > On Tue, Jun 7, 2011 at 11:16 PM, Sun Chan <sun.c...@gmail.com> wrote: >> >> We did not approve this, did we? Also, Chris is not gatekeeper, nor Shin. >> I thought Matt (previous STL gatekeeper) had some comments about size >> etc, and Shin suggested we discuss this this coming Thursday. >> Sun >> >> On Tue, Jun 7, 2011 at 11:08 PM, Das, Dibyendu <dibyendu....@amd.com> >> wrote: >> > CR by Shin/Sun/Chris. >> > >> > TBD: Send patch to gcc with additional information. >> > >> > -----Original Message----- >> > From: s...@open64.net [mailto:s...@open64.net] >> > Sent: Wednesday, June 08, 2011 11:36 AM >> > To: open64-devel@lists.sourceforge.net >> > Subject: [Open64-devel] r3642 - >> > trunk/osprey-gcc-4.2.0/libstdc++-v3/include/bits >> > >> > Author: dibyendu >> > Date: 2011-06-08 02:06:24 -0400 (Wed, 08 Jun 2011) >> > New Revision: 3642 >> > >> > Modified: >> > trunk/osprey-gcc-4.2.0/libstdc++-v3/include/bits/stl_tree.h >> > Log: >> > Implementation of fast STL set/map which allows iterators to be speedier >> > when iterators are hot. The underlying Red-Black Tree structure has been >> > changed for this purpose. Currently the implementation is available >> > under the -D__OPEN64_FAST_SET. >> > >> > >> > >> > Modified: trunk/osprey-gcc-4.2.0/libstdc++-v3/include/bits/stl_tree.h >> > =================================================================== >> > --- trunk/osprey-gcc-4.2.0/libstdc++-v3/include/bits/stl_tree.h >> > 2011-06-04 07:25:15 UTC (rev 3641) >> > +++ trunk/osprey-gcc-4.2.0/libstdc++-v3/include/bits/stl_tree.h >> > 2011-06-08 06:06:24 UTC (rev 3642) >> > @@ -100,6 +100,11 @@ >> > _Base_ptr _M_left; >> > _Base_ptr _M_right; >> > >> > +#ifdef __OPEN64_FAST_SET >> > + _Base_ptr _M_prev; >> > + _Base_ptr _M_next; >> > +#endif >> > + >> > static _Base_ptr >> > _S_minimum(_Base_ptr __x) >> > { >> > @@ -180,7 +185,11 @@ >> > _Self& >> > operator++() >> > { >> > +#ifdef __OPEN64_FAST_SET >> > + _M_node = _M_node->_M_next; >> > +#else >> > _M_node = _Rb_tree_increment(_M_node); >> > +#endif >> > return *this; >> > } >> > >> > @@ -188,14 +197,23 @@ >> > operator++(int) >> > { >> > _Self __tmp = *this; >> > + >> > +#ifdef __OPEN64_FAST_SET >> > + _M_node = _M_node->_M_next; >> > +#else >> > _M_node = _Rb_tree_increment(_M_node); >> > +#endif >> > return __tmp; >> > } >> > >> > _Self& >> > operator--() >> > { >> > +#ifdef __OPEN64_FAST_SET >> > + _M_node = _M_node->_M_prev; >> > +#else >> > _M_node = _Rb_tree_decrement(_M_node); >> > +#endif >> > return *this; >> > } >> > >> > @@ -203,7 +221,12 @@ >> > operator--(int) >> > { >> > _Self __tmp = *this; >> > + >> > +#ifdef __OPEN64_FAST_SET >> > + _M_node = _M_node->_M_prev; >> > +#else >> > _M_node = _Rb_tree_decrement(_M_node); >> > +#endif >> > return __tmp; >> > } >> > >> > @@ -255,7 +278,11 @@ >> > _Self& >> > operator++() >> > { >> > +#ifdef __OPEN64_FAST_SET >> > + _M_node = _M_node->_M_next; >> > +#else >> > _M_node = _Rb_tree_increment(_M_node); >> > +#endif >> > return *this; >> > } >> > >> > @@ -263,14 +290,23 @@ >> > operator++(int) >> > { >> > _Self __tmp = *this; >> > + >> > +#ifdef __OPEN64_FAST_SET >> > + _M_node = _M_node->_M_next; >> > +#else >> > _M_node = _Rb_tree_increment(_M_node); >> > +#endif >> > return __tmp; >> > } >> > >> > _Self& >> > operator--() >> > { >> > +#ifdef __OPEN64_FAST_SET >> > + _M_node = _M_node->_M_prev; >> > +#else >> > _M_node = _Rb_tree_decrement(_M_node); >> > +#endif >> > return *this; >> > } >> > >> > @@ -278,7 +314,12 @@ >> > operator--(int) >> > { >> > _Self __tmp = *this; >> > + >> > +#ifdef __OPEN64_FAST_SET >> > + _M_node = _M_node->_M_prev; >> > +#else >> > _M_node = _Rb_tree_decrement(_M_node); >> > +#endif >> > return __tmp; >> > } >> > >> > @@ -324,6 +365,16 @@ >> > _Rb_tree_node_base& __header); >> > >> > >> > +#ifdef __OPEN64_FAST_SET >> > + void >> > + _Rb_tree_insert_into_sorted_list(const bool __insert_left, >> > + _Rb_tree_node_base* __x, >> > + _Rb_tree_node_base* __p, >> > + _Rb_tree_node_base& __header); >> > + void >> > + _Rb_tree_recreate_sorted_list(_Rb_tree_node_base& __header); >> > +#endif >> > + >> > template<typename _Key, typename _Val, typename _KeyOfValue, >> > typename _Compare, typename _Alloc = allocator<_Val> > >> > class _Rb_tree >> > @@ -391,6 +442,12 @@ >> > __tmp->_M_color = __x->_M_color; >> > __tmp->_M_left = 0; >> > __tmp->_M_right = 0; >> > + >> > +#ifdef __OPEN64_FAST_SET >> > + __tmp->_M_prev = __tmp; >> > + __tmp->_M_next = __tmp; >> > +#endif >> > + >> > return __tmp; >> > } >> > >> > @@ -419,6 +476,11 @@ >> > this->_M_header._M_parent = 0; >> > this->_M_header._M_left = &this->_M_header; >> > this->_M_header._M_right = &this->_M_header; >> > + >> > +#ifdef __OPEN64_FAST_SET >> > + this->_M_header._M_prev = &this->_M_header; >> > + this->_M_header._M_next = &this->_M_header; >> > +#endif >> > } >> > }; >> > >> > @@ -440,6 +502,12 @@ >> > this->_M_header._M_parent = 0; >> > this->_M_header._M_left = &this->_M_header; >> > this->_M_header._M_right = &this->_M_header; >> > + >> > +#ifdef __OPEN64_FAST_SET >> > + this->_M_header._M_prev = &this->_M_header; >> > + this->_M_header._M_next = &this->_M_header; >> > +#endif >> > + >> > } >> > }; >> > >> > @@ -585,6 +653,10 @@ >> > _M_leftmost() = _S_minimum(_M_root()); >> > _M_rightmost() = _S_maximum(_M_root()); >> > _M_impl._M_node_count = __x._M_impl._M_node_count; >> > + >> > +#ifdef __OPEN64_FAST_SET >> > + _Rb_tree_recreate_sorted_list(this->_M_impl._M_header); >> > +#endif >> > } >> > } >> > >> > @@ -713,6 +785,11 @@ >> > _M_root() = 0; >> > _M_rightmost() = _M_end(); >> > _M_impl._M_node_count = 0; >> > + >> > +#ifdef __OPEN64_FAST_SET >> > + _M_end()->_M_next = _M_end(); >> > + _M_end()->_M_prev = _M_end(); >> > +#endif >> > } >> > >> > // Set operations. >> > @@ -820,6 +897,10 @@ >> > _M_leftmost() = _S_minimum(_M_root()); >> > _M_rightmost() = _S_maximum(_M_root()); >> > _M_impl._M_node_count = __x._M_impl._M_node_count; >> > + >> > +#ifdef __OPEN64_FAST_SET >> > + _Rb_tree_recreate_sorted_list(this->_M_impl._M_header); >> > +#endif >> > } >> > } >> > return *this; >> > @@ -837,6 +918,10 @@ >> > >> > _Link_type __z = _M_create_node(__v); >> > >> > +#ifdef __OPEN64_FAST_SET >> > + _Rb_tree_insert_into_sorted_list(__insert_left, __z, __p, >> > + this->_M_impl._M_header); >> > +#endif >> > _Rb_tree_insert_and_rebalance(__insert_left, __z, __p, >> > this->_M_impl._M_header); >> > ++_M_impl._M_node_count; >> > @@ -855,6 +940,10 @@ >> > >> > _Link_type __z = _M_create_node(__v); >> > >> > +#ifdef __OPEN64_FAST_SET >> > + _Rb_tree_insert_into_sorted_list(__insert_left, __z, __p, >> > + this->_M_impl._M_header); >> > +#endif >> > _Rb_tree_insert_and_rebalance(__insert_left, __z, __p, >> > this->_M_impl._M_header); >> > ++_M_impl._M_node_count; >> > @@ -873,6 +962,11 @@ >> > >> > _Link_type __z = _M_create_node(__v); >> > >> > +#ifdef __OPEN64_FAST_SET >> > + _Rb_tree_insert_into_sorted_list(__insert_left, __z, >> > + const_cast<_Base_ptr>(__p), >> > + this->_M_impl._M_header); >> > +#endif >> > _Rb_tree_insert_and_rebalance(__insert_left, __z, >> > const_cast<_Base_ptr>(__p), >> > this->_M_impl._M_header); >> > @@ -928,10 +1022,23 @@ >> > _M_leftmost() = __t._M_leftmost(); >> > _M_rightmost() = __t._M_rightmost(); >> > _M_root()->_M_parent = _M_end(); >> > + >> > +#ifdef __OPEN64_FAST_SET >> > + _M_end()->_M_next = _M_leftmost(); >> > + _M_leftmost()->_M_prev = _M_end(); >> > + _M_end()->_M_prev = _M_rightmost(); >> > + _M_rightmost()->_M_next = _M_end(); >> > +#endif >> > >> > __t._M_root() = 0; >> > __t._M_leftmost() = __t._M_end(); >> > __t._M_rightmost() = __t._M_end(); >> > + >> > +#ifdef __OPEN64_FAST_SET >> > + __t._M_end()->_M_prev = __t._M_end(); >> > + __t._M_end()->_M_next = __t._M_end(); >> > +#endif >> > + >> > } >> > } >> > else if (__t._M_root() == 0) >> > @@ -940,10 +1047,24 @@ >> > __t._M_leftmost() = _M_leftmost(); >> > __t._M_rightmost() = _M_rightmost(); >> > __t._M_root()->_M_parent = __t._M_end(); >> > + >> > +#ifdef __OPEN64_FAST_SET >> > + __t._M_end()->_M_next = __t._M_leftmost(); >> > + __t._M_leftmost()->_M_prev = __t._M_end(); >> > + __t._M_end()->_M_prev = __t._M_rightmost(); >> > + __t._M_rightmost()->_M_next = __t._M_end(); >> > +#endif >> > >> > + >> > _M_root() = 0; >> > _M_leftmost() = _M_end(); >> > _M_rightmost() = _M_end(); >> > + >> > +#ifdef __OPEN64_FAST_SET >> > + _M_end()->_M_prev = _M_end(); >> > + _M_end()->_M_next = _M_end(); >> > +#endif >> > + >> > } >> > else >> > { >> > @@ -953,6 +1074,19 @@ >> > >> > _M_root()->_M_parent = _M_end(); >> > __t._M_root()->_M_parent = __t._M_end(); >> > + >> > +#ifdef __OPEN64_FAST_SET >> > + _M_end()->_M_next = _M_leftmost(); >> > + _M_leftmost()->_M_prev = _M_end(); >> > + _M_end()->_M_prev = _M_rightmost(); >> > + _M_rightmost()->_M_next = _M_end(); >> > + __t._M_end()->_M_next = __t._M_leftmost(); >> > + __t._M_leftmost()->_M_prev = __t._M_end(); >> > + __t._M_end()->_M_prev = __t._M_rightmost(); >> > + __t._M_rightmost()->_M_next = __t._M_end(); >> > +#endif >> > + >> > + >> > } >> > // No need to swap header's color as it does not change. >> > std::swap(this->_M_impl._M_node_count, __t._M_impl._M_node_count); >> > @@ -1245,6 +1379,12 @@ >> > static_cast<_Link_type>(_Rb_tree_rebalance_for_erase >> > (__position._M_node, >> > this->_M_impl._M_header)); >> > + >> > +#ifdef __OPEN64_FAST_SET >> > + __y->_M_prev->_M_next = __y->_M_next; >> > + __y->_M_next->_M_prev = __y->_M_prev; >> > +#endif >> > + >> > _M_destroy_node(__y); >> > --_M_impl._M_node_count; >> > } >> > @@ -1259,6 +1399,11 @@ >> > static_cast<_Link_type>(_Rb_tree_rebalance_for_erase >> > >> > (const_cast<_Base_ptr>(__position._M_node), >> > this->_M_impl._M_header)); >> > +#ifdef __OPEN64_FAST_SET >> > + __y->_M_prev->_M_next = __y->_M_next; >> > + __y->_M_next->_M_prev = __y->_M_prev; >> > +#endif >> > + >> > _M_destroy_node(__y); >> > --_M_impl._M_node_count; >> > } >> > @@ -1281,7 +1426,7 @@ >> > _Rb_tree<_Key, _Val, _KoV, _Compare, _Alloc>:: >> > _M_copy(_Const_Link_type __x, _Link_type __p) >> > { >> > - // Structural copy. __x and __p must be non-null. >> > + >> > _Link_type __top = _M_clone_node(__x); >> > __top->_M_parent = __p; >> > >> > @@ -1289,9 +1434,11 @@ >> > { >> > if (__x->_M_right) >> > __top->_M_right = _M_copy(_S_right(__x), __top); >> > + >> > __p = __top; >> > __x = _S_left(__x); >> > >> > + >> > while (__x != 0) >> > { >> > _Link_type __y = _M_clone_node(__x); >> > @@ -1299,6 +1446,7 @@ >> > __y->_M_parent = __p; >> > if (__x->_M_right) >> > __y->_M_right = _M_copy(_S_right(__x), __y); >> > + >> > __p = __y; >> > __x = _S_left(__x); >> > } >> > @@ -1322,6 +1470,11 @@ >> > { >> > _M_erase(_S_right(__x)); >> > _Link_type __y = _S_left(__x); >> > + >> > +#ifdef __OPEN64_FAST_SET >> > + __x->_M_prev->_M_next = __x->_M_next; >> > + __x->_M_next->_M_prev = __x->_M_prev; >> > +#endif >> > _M_destroy_node(__x); >> > __x = __y; >> > } >> > @@ -1552,6 +1705,49 @@ >> > return true; >> > } >> > >> > +#ifdef __OPEN64_FAST_SET >> > +inline void >> > +_Rb_tree_insert_into_sorted_list(const bool __insert_left, >> > + _Rb_tree_node_base* __x, >> > + _Rb_tree_node_base* __p, >> > + _Rb_tree_node_base& __header ) >> > +{ >> > + if ( __insert_left) >> > + { >> > + __x->_M_next = __p; >> > + __x->_M_prev = __p->_M_prev; >> > + __p->_M_prev->_M_next = __x; >> > + __p->_M_prev = __x; >> > + } >> > + else { >> > + __x->_M_prev = __p; >> > + __x->_M_next = __p->_M_next; >> > + __p->_M_next->_M_prev = __x; >> > + __p->_M_next = __x; >> > + } >> > +} >> > +inline void >> > +_Rb_tree_recreate_sorted_list(_Rb_tree_node_base& __header ) >> > +{ >> > + _Rb_tree_node_base *__x, *__y, *__rightmost; >> > + >> > + __rightmost = __header._M_right; >> > + __x = __header._M_left; >> > + __x->_M_prev = &__header; >> > + __header._M_next = __x; >> > + >> > + while ( __x != __rightmost ) >> > + { >> > + __y = _Rb_tree_increment(__x); >> > + __x->_M_next = __y; >> > + __y->_M_prev = __x; >> > + __x = __y; >> > + } >> > + __rightmost->_M_next = &__header; >> > + __header._M_prev = __rightmost; >> > +} >> > +#endif >> > + >> > _GLIBCXX_END_NAMESPACE >> > >> > #endif >> > >> > >> > >> > ------------------------------------------------------------------------------ >> > EditLive Enterprise is the world's most technically advanced content >> > authoring tool. Experience the power of Track Changes, Inline Image >> > Editing and ensure content is compliant with Accessibility Checking. >> > http://p.sf.net/sfu/ephox-dev2dev >> > _______________________________________________ >> > Open64-devel mailing list >> > Open64-devel@lists.sourceforge.net >> > https://lists.sourceforge.net/lists/listinfo/open64-devel >> > >> > >> > >> > >> > ------------------------------------------------------------------------------ >> > EditLive Enterprise is the world's most technically advanced content >> > authoring tool. Experience the power of Track Changes, Inline Image >> > Editing and ensure content is compliant with Accessibility Checking. >> > http://p.sf.net/sfu/ephox-dev2dev >> > _______________________________________________ >> > Open64-devel mailing list >> > Open64-devel@lists.sourceforge.net >> > https://lists.sourceforge.net/lists/listinfo/open64-devel >> > >> >> >> ------------------------------------------------------------------------------ >> EditLive Enterprise is the world's most technically advanced content >> authoring tool. Experience the power of Track Changes, Inline Image >> Editing and ensure content is compliant with Accessibility Checking. >> http://p.sf.net/sfu/ephox-dev2dev >> _______________________________________________ >> Open64-devel mailing list >> Open64-devel@lists.sourceforge.net >> https://lists.sourceforge.net/lists/listinfo/open64-devel > > ------------------------------------------------------------------------------ EditLive Enterprise is the world's most technically advanced content authoring tool. Experience the power of Track Changes, Inline Image Editing and ensure content is compliant with Accessibility Checking. http://p.sf.net/sfu/ephox-dev2dev _______________________________________________ Open64-devel mailing list Open64-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/open64-devel