1951a39d68df598db08dfced8b4707755864a0492Ying Wang/* 2951a39d68df598db08dfced8b4707755864a0492Ying Wang * 3951a39d68df598db08dfced8b4707755864a0492Ying Wang * Copyright (c) 1994 4951a39d68df598db08dfced8b4707755864a0492Ying Wang * Hewlett-Packard Company 5951a39d68df598db08dfced8b4707755864a0492Ying Wang * 6951a39d68df598db08dfced8b4707755864a0492Ying Wang * Copyright (c) 1996,1997 7951a39d68df598db08dfced8b4707755864a0492Ying Wang * Silicon Graphics Computer Systems, Inc. 8951a39d68df598db08dfced8b4707755864a0492Ying Wang * 9951a39d68df598db08dfced8b4707755864a0492Ying Wang * Copyright (c) 1997 10951a39d68df598db08dfced8b4707755864a0492Ying Wang * Moscow Center for SPARC Technology 11951a39d68df598db08dfced8b4707755864a0492Ying Wang * 12951a39d68df598db08dfced8b4707755864a0492Ying Wang * Copyright (c) 1999 13951a39d68df598db08dfced8b4707755864a0492Ying Wang * Boris Fomitchev 14951a39d68df598db08dfced8b4707755864a0492Ying Wang * 15951a39d68df598db08dfced8b4707755864a0492Ying Wang * This material is provided "as is", with absolutely no warranty expressed 16951a39d68df598db08dfced8b4707755864a0492Ying Wang * or implied. Any use is at your own risk. 17951a39d68df598db08dfced8b4707755864a0492Ying Wang * 18951a39d68df598db08dfced8b4707755864a0492Ying Wang * Permission to use or copy this software for any purpose is hereby granted 19951a39d68df598db08dfced8b4707755864a0492Ying Wang * without fee, provided the above notices are retained on all copies. 20951a39d68df598db08dfced8b4707755864a0492Ying Wang * Permission to modify the code and to distribute modified code is granted, 21951a39d68df598db08dfced8b4707755864a0492Ying Wang * provided the above notices are retained, and a notice that the code was 22951a39d68df598db08dfced8b4707755864a0492Ying Wang * modified is included with the above copyright notice. 23951a39d68df598db08dfced8b4707755864a0492Ying Wang * 24951a39d68df598db08dfced8b4707755864a0492Ying Wang */ 25951a39d68df598db08dfced8b4707755864a0492Ying Wang 26951a39d68df598db08dfced8b4707755864a0492Ying Wang/* NOTE: This is an internal header file, included by other STL headers. 27951a39d68df598db08dfced8b4707755864a0492Ying Wang * You should not attempt to use it directly. 28951a39d68df598db08dfced8b4707755864a0492Ying Wang */ 29951a39d68df598db08dfced8b4707755864a0492Ying Wang 30951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifndef _STLP_INTERNAL_DBG_LIST_H 31951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _STLP_INTERNAL_DBG_LIST_H 32951a39d68df598db08dfced8b4707755864a0492Ying Wang 33951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifndef _STLP_INTERNAL_ALGO_H 34951a39d68df598db08dfced8b4707755864a0492Ying Wang# include <stl/_algo.h> 35951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 36951a39d68df598db08dfced8b4707755864a0492Ying Wang 37951a39d68df598db08dfced8b4707755864a0492Ying Wang#ifndef _STLP_DBG_ITERATOR_H 38951a39d68df598db08dfced8b4707755864a0492Ying Wang# include <stl/debug/_iterator.h> 39951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 40951a39d68df598db08dfced8b4707755864a0492Ying Wang 41951a39d68df598db08dfced8b4707755864a0492Ying Wang#define _STLP_NON_DBG_LIST _STLP_PRIV _STLP_NON_DBG_NAME(list) <_Tp, _Alloc> 42951a39d68df598db08dfced8b4707755864a0492Ying Wang 43951a39d68df598db08dfced8b4707755864a0492Ying Wang_STLP_BEGIN_NAMESPACE 44951a39d68df598db08dfced8b4707755864a0492Ying Wang 45951a39d68df598db08dfced8b4707755864a0492Ying Wang#if defined (_STLP_DEBUG_USE_DISTINCT_VALUE_TYPE_HELPERS) 46951a39d68df598db08dfced8b4707755864a0492Ying Wangtemplate <class _Tp, class _Alloc> 47951a39d68df598db08dfced8b4707755864a0492Ying Wanginline _Tp* 48951a39d68df598db08dfced8b4707755864a0492Ying Wangvalue_type(const _STLP_PRIV _DBG_iter_base< _STLP_NON_DBG_LIST >&) 49951a39d68df598db08dfced8b4707755864a0492Ying Wang{ return (_Tp*)0; } 50951a39d68df598db08dfced8b4707755864a0492Ying Wangtemplate <class _Tp, class _Alloc> 51951a39d68df598db08dfced8b4707755864a0492Ying Wanginline bidirectional_iterator_tag 52951a39d68df598db08dfced8b4707755864a0492Ying Wangiterator_category(const _STLP_PRIV _DBG_iter_base< _STLP_NON_DBG_LIST >&) 53951a39d68df598db08dfced8b4707755864a0492Ying Wang{ return bidirectional_iterator_tag(); } 54951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 55951a39d68df598db08dfced8b4707755864a0492Ying Wang 56951a39d68df598db08dfced8b4707755864a0492Ying Wangtemplate <class _Tp, _STLP_DFL_TMPL_PARAM(_Alloc, allocator<_Tp>) > 57951a39d68df598db08dfced8b4707755864a0492Ying Wangclass list : 58951a39d68df598db08dfced8b4707755864a0492Ying Wang#if !defined (__DMC__) 59951a39d68df598db08dfced8b4707755864a0492Ying Wang private 60951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 61951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_PRIV __construct_checker<_STLP_NON_DBG_LIST > 62951a39d68df598db08dfced8b4707755864a0492Ying Wang#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) 63951a39d68df598db08dfced8b4707755864a0492Ying Wang , public __stlport_class<list<_Tp, _Alloc> > 64951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 65951a39d68df598db08dfced8b4707755864a0492Ying Wang{ 66951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef _STLP_NON_DBG_LIST _Base; 67951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef list<_Tp, _Alloc> _Self; 68951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef _STLP_PRIV __construct_checker<_STLP_NON_DBG_LIST > _ConstructCheck; 69951a39d68df598db08dfced8b4707755864a0492Ying Wang 70951a39d68df598db08dfced8b4707755864a0492Ying Wangpublic: 71951a39d68df598db08dfced8b4707755864a0492Ying Wang __IMPORT_CONTAINER_TYPEDEFS(_Base) 72951a39d68df598db08dfced8b4707755864a0492Ying Wang 73951a39d68df598db08dfced8b4707755864a0492Ying Wangpublic: 74951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef _STLP_PRIV _DBG_iter<_Base, _STLP_PRIV _DbgTraits<_Nonconst_traits<value_type> > > iterator; 75951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef _STLP_PRIV _DBG_iter<_Base, _STLP_PRIV _DbgTraits<_Const_traits<value_type> > > const_iterator; 76951a39d68df598db08dfced8b4707755864a0492Ying Wang 77951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_DECLARE_BIDIRECTIONAL_REVERSE_ITERATORS; 78951a39d68df598db08dfced8b4707755864a0492Ying Wang 79951a39d68df598db08dfced8b4707755864a0492Ying Wangprivate: 80951a39d68df598db08dfced8b4707755864a0492Ying Wang _Base _M_non_dbg_impl; 81951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_PRIV __owned_list _M_iter_list; 82951a39d68df598db08dfced8b4707755864a0492Ying Wang 83951a39d68df598db08dfced8b4707755864a0492Ying Wang void _Invalidate_iterator(const iterator& __it) 84951a39d68df598db08dfced8b4707755864a0492Ying Wang { _STLP_PRIV __invalidate_iterator(&_M_iter_list, __it); } 85951a39d68df598db08dfced8b4707755864a0492Ying Wang void _Invalidate_iterators(const iterator& __first, const iterator& __last) 86951a39d68df598db08dfced8b4707755864a0492Ying Wang { _STLP_PRIV __invalidate_range(&_M_iter_list, __first, __last); } 87951a39d68df598db08dfced8b4707755864a0492Ying Wang 88951a39d68df598db08dfced8b4707755864a0492Ying Wang typedef typename _Base::iterator _Base_iterator; 89951a39d68df598db08dfced8b4707755864a0492Ying Wang 90951a39d68df598db08dfced8b4707755864a0492Ying Wangpublic: 91951a39d68df598db08dfced8b4707755864a0492Ying Wang explicit list(const allocator_type& __a = allocator_type()) : 92951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_non_dbg_impl(__a), _M_iter_list(&_M_non_dbg_impl) {} 93951a39d68df598db08dfced8b4707755864a0492Ying Wang 94951a39d68df598db08dfced8b4707755864a0492Ying Wang#if !defined(_STLP_DONT_SUP_DFLT_PARAM) 95951a39d68df598db08dfced8b4707755864a0492Ying Wang explicit list(size_type __n, const _Tp& __x = _Tp(), 96951a39d68df598db08dfced8b4707755864a0492Ying Wang#else 97951a39d68df598db08dfced8b4707755864a0492Ying Wang list(size_type __n, const _Tp& __x, 98951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif /*!_STLP_DONT_SUP_DFLT_PARAM*/ 99951a39d68df598db08dfced8b4707755864a0492Ying Wang const allocator_type& __a = allocator_type()) 100951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_non_dbg_impl(__n, __x, __a), _M_iter_list(&_M_non_dbg_impl) {} 101951a39d68df598db08dfced8b4707755864a0492Ying Wang 102951a39d68df598db08dfced8b4707755864a0492Ying Wang#if defined(_STLP_DONT_SUP_DFLT_PARAM) 103951a39d68df598db08dfced8b4707755864a0492Ying Wang explicit list(size_type __n) 104951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_non_dbg_impl(__n), _M_iter_list(&_M_non_dbg_impl) {} 105951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif /*_STLP_DONT_SUP_DFLT_PARAM*/ 106951a39d68df598db08dfced8b4707755864a0492Ying Wang 107951a39d68df598db08dfced8b4707755864a0492Ying Wang#if !defined (_STLP_NO_MOVE_SEMANTIC) 108951a39d68df598db08dfced8b4707755864a0492Ying Wang list(__move_source<_Self> src) 109951a39d68df598db08dfced8b4707755864a0492Ying Wang : _M_non_dbg_impl(__move_source<_Base>(src.get()._M_non_dbg_impl)), 110951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_iter_list(&_M_non_dbg_impl) { 111951a39d68df598db08dfced8b4707755864a0492Ying Wang# if defined (_STLP_NO_EXTENSIONS) || (_STLP_DEBUG_LEVEL == _STLP_STANDARD_DBG_LEVEL) 112951a39d68df598db08dfced8b4707755864a0492Ying Wang src.get()._M_iter_list._Invalidate_all(); 113951a39d68df598db08dfced8b4707755864a0492Ying Wang# else 114951a39d68df598db08dfced8b4707755864a0492Ying Wang src.get()._M_iter_list._Set_owner(_M_iter_list); 115951a39d68df598db08dfced8b4707755864a0492Ying Wang# endif 116951a39d68df598db08dfced8b4707755864a0492Ying Wang } 117951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 118951a39d68df598db08dfced8b4707755864a0492Ying Wang 119951a39d68df598db08dfced8b4707755864a0492Ying Wang#if defined (_STLP_MEMBER_TEMPLATES) 120951a39d68df598db08dfced8b4707755864a0492Ying Wang template <class _InputIterator> 121951a39d68df598db08dfced8b4707755864a0492Ying Wang list(_InputIterator __first, _InputIterator __last, 122951a39d68df598db08dfced8b4707755864a0492Ying Wang const allocator_type& __a _STLP_ALLOCATOR_TYPE_DFL) 123951a39d68df598db08dfced8b4707755864a0492Ying Wang : _ConstructCheck(__first, __last), 124951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_non_dbg_impl(_STLP_PRIV _Non_Dbg_iter(__first), _STLP_PRIV _Non_Dbg_iter(__last), __a), 125951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_iter_list(&_M_non_dbg_impl) {} 126951a39d68df598db08dfced8b4707755864a0492Ying Wang# if defined (_STLP_NEEDS_EXTRA_TEMPLATE_CONSTRUCTORS) 127951a39d68df598db08dfced8b4707755864a0492Ying Wang template <class _InputIterator> 128951a39d68df598db08dfced8b4707755864a0492Ying Wang list(_InputIterator __first, _InputIterator __last) 129951a39d68df598db08dfced8b4707755864a0492Ying Wang : _ConstructCheck(__first, __last), 130951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_non_dbg_impl(_STLP_PRIV _Non_Dbg_iter(__first), _STLP_PRIV _Non_Dbg_iter(__last)), 131951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_iter_list(&_M_non_dbg_impl) {} 132951a39d68df598db08dfced8b4707755864a0492Ying Wang# endif 133951a39d68df598db08dfced8b4707755864a0492Ying Wang#else 134951a39d68df598db08dfced8b4707755864a0492Ying Wang 135951a39d68df598db08dfced8b4707755864a0492Ying Wang list(const value_type* __first, const value_type* __last, 136951a39d68df598db08dfced8b4707755864a0492Ying Wang const allocator_type& __a = allocator_type()) 137951a39d68df598db08dfced8b4707755864a0492Ying Wang : _ConstructCheck(__first, __last), 138951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_non_dbg_impl(__first, __last, __a), 139951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_iter_list(&_M_non_dbg_impl) {} 140951a39d68df598db08dfced8b4707755864a0492Ying Wang list(const_iterator __first, const_iterator __last, 141951a39d68df598db08dfced8b4707755864a0492Ying Wang const allocator_type& __a = allocator_type()) 142951a39d68df598db08dfced8b4707755864a0492Ying Wang : _ConstructCheck(__first, __last), 143951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_non_dbg_impl(__first._M_iterator, __last._M_iterator, __a), 144951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_iter_list(&_M_non_dbg_impl) {} 145951a39d68df598db08dfced8b4707755864a0492Ying Wang 146951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 147951a39d68df598db08dfced8b4707755864a0492Ying Wang 148951a39d68df598db08dfced8b4707755864a0492Ying Wang list(const _Self& __x) : 149951a39d68df598db08dfced8b4707755864a0492Ying Wang _ConstructCheck(__x), 150951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_non_dbg_impl(__x._M_non_dbg_impl) , _M_iter_list(&_M_non_dbg_impl) {} 151951a39d68df598db08dfced8b4707755864a0492Ying Wang 152951a39d68df598db08dfced8b4707755864a0492Ying Wang _Self& operator=(const _Self& __x) { 153951a39d68df598db08dfced8b4707755864a0492Ying Wang if (this != &__x) { 154951a39d68df598db08dfced8b4707755864a0492Ying Wang //Should not invalidate end iterator 155951a39d68df598db08dfced8b4707755864a0492Ying Wang _Invalidate_iterators(begin(), end()); 156951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_non_dbg_impl = __x._M_non_dbg_impl; 157951a39d68df598db08dfced8b4707755864a0492Ying Wang } 158951a39d68df598db08dfced8b4707755864a0492Ying Wang return *this; 159951a39d68df598db08dfced8b4707755864a0492Ying Wang } 160951a39d68df598db08dfced8b4707755864a0492Ying Wang 161951a39d68df598db08dfced8b4707755864a0492Ying Wang allocator_type get_allocator() const { return _M_non_dbg_impl.get_allocator(); } 162951a39d68df598db08dfced8b4707755864a0492Ying Wang 163951a39d68df598db08dfced8b4707755864a0492Ying Wang iterator begin() { return iterator(&_M_iter_list, _M_non_dbg_impl.begin()); } 164951a39d68df598db08dfced8b4707755864a0492Ying Wang const_iterator begin() const { return const_iterator(&_M_iter_list, _M_non_dbg_impl.begin()); } 165951a39d68df598db08dfced8b4707755864a0492Ying Wang 166951a39d68df598db08dfced8b4707755864a0492Ying Wang iterator end() { return iterator(&_M_iter_list, _M_non_dbg_impl.end()); } 167951a39d68df598db08dfced8b4707755864a0492Ying Wang const_iterator end() const { return const_iterator(&_M_iter_list, _M_non_dbg_impl.end()); } 168951a39d68df598db08dfced8b4707755864a0492Ying Wang 169951a39d68df598db08dfced8b4707755864a0492Ying Wang reverse_iterator rbegin() { return reverse_iterator(end()); } 170951a39d68df598db08dfced8b4707755864a0492Ying Wang reverse_iterator rend() { return reverse_iterator(begin()); } 171951a39d68df598db08dfced8b4707755864a0492Ying Wang 172951a39d68df598db08dfced8b4707755864a0492Ying Wang const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); } 173951a39d68df598db08dfced8b4707755864a0492Ying Wang const_reverse_iterator rend() const { return const_reverse_iterator(begin()); } 174951a39d68df598db08dfced8b4707755864a0492Ying Wang 175951a39d68df598db08dfced8b4707755864a0492Ying Wang size_type size() const { return _M_non_dbg_impl.size(); } 176951a39d68df598db08dfced8b4707755864a0492Ying Wang size_type max_size() const { return _M_non_dbg_impl.max_size(); } 177951a39d68df598db08dfced8b4707755864a0492Ying Wang bool empty() const { return _M_non_dbg_impl.empty(); } 178951a39d68df598db08dfced8b4707755864a0492Ying Wang 179951a39d68df598db08dfced8b4707755864a0492Ying Wang // those are here to enforce checking 180951a39d68df598db08dfced8b4707755864a0492Ying Wang reference front() { 181951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_VERBOSE_ASSERT(!empty(), _StlMsg_EMPTY_CONTAINER) 182951a39d68df598db08dfced8b4707755864a0492Ying Wang return *begin(); 183951a39d68df598db08dfced8b4707755864a0492Ying Wang } 184951a39d68df598db08dfced8b4707755864a0492Ying Wang const_reference front() const { 185951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_VERBOSE_ASSERT(!empty(), _StlMsg_EMPTY_CONTAINER) 186951a39d68df598db08dfced8b4707755864a0492Ying Wang return *begin(); 187951a39d68df598db08dfced8b4707755864a0492Ying Wang } 188951a39d68df598db08dfced8b4707755864a0492Ying Wang reference back() { 189951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_VERBOSE_ASSERT(!empty(), _StlMsg_EMPTY_CONTAINER) 190951a39d68df598db08dfced8b4707755864a0492Ying Wang return *(--end()); 191951a39d68df598db08dfced8b4707755864a0492Ying Wang } 192951a39d68df598db08dfced8b4707755864a0492Ying Wang const_reference back() const { 193951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_VERBOSE_ASSERT(!empty(), _StlMsg_EMPTY_CONTAINER) 194951a39d68df598db08dfced8b4707755864a0492Ying Wang return *(--end()); 195951a39d68df598db08dfced8b4707755864a0492Ying Wang } 196951a39d68df598db08dfced8b4707755864a0492Ying Wang 197951a39d68df598db08dfced8b4707755864a0492Ying Wang void swap(_Self& __x) { 198951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_iter_list._Swap_owners(__x._M_iter_list); 199951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_non_dbg_impl.swap(__x._M_non_dbg_impl); 200951a39d68df598db08dfced8b4707755864a0492Ying Wang } 201951a39d68df598db08dfced8b4707755864a0492Ying Wang#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER) 202951a39d68df598db08dfced8b4707755864a0492Ying Wang void _M_swap_workaround(_Self& __x) { swap(__x); } 203951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 204951a39d68df598db08dfced8b4707755864a0492Ying Wang 205951a39d68df598db08dfced8b4707755864a0492Ying Wang#if !defined(_STLP_DONT_SUP_DFLT_PARAM) && !defined(_STLP_NO_ANACHRONISMS) 206951a39d68df598db08dfced8b4707755864a0492Ying Wang iterator insert(iterator __pos, const _Tp& __x = _Tp()) { 207951a39d68df598db08dfced8b4707755864a0492Ying Wang#else 208951a39d68df598db08dfced8b4707755864a0492Ying Wang iterator insert(iterator __pos, const _Tp& __x) { 209951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif /*!_STLP_DONT_SUP_DFLT_PARAM && !_STLP_NO_ANACHRONISMS*/ 210951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__pos)) 211951a39d68df598db08dfced8b4707755864a0492Ying Wang return iterator(&_M_iter_list,_M_non_dbg_impl.insert(__pos._M_iterator, __x) ); 212951a39d68df598db08dfced8b4707755864a0492Ying Wang } 213951a39d68df598db08dfced8b4707755864a0492Ying Wang 214951a39d68df598db08dfced8b4707755864a0492Ying Wang#if defined(_STLP_DONT_SUP_DFLT_PARAM) && !defined(_STLP_NO_ANACHRONISMS) 215951a39d68df598db08dfced8b4707755864a0492Ying Wang iterator insert(iterator __pos) { return insert(__pos, _STLP_DEFAULT_CONSTRUCTED(_Tp)); } 216951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif /*_STLP_DONT_SUP_DFLT_PARAM && !_STLP_NO_ANACHRONISMS*/ 217951a39d68df598db08dfced8b4707755864a0492Ying Wang 218951a39d68df598db08dfced8b4707755864a0492Ying Wang#if defined (_STLP_MEMBER_TEMPLATES) 219951a39d68df598db08dfced8b4707755864a0492Ying Wang template <class _InputIterator> 220951a39d68df598db08dfced8b4707755864a0492Ying Wang void insert(iterator __pos, _InputIterator __first, _InputIterator __last) { 221951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list, __pos)) 222951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last)) 223951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_non_dbg_impl.insert(__pos._M_iterator, 224951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_PRIV _Non_Dbg_iter(__first), _STLP_PRIV _Non_Dbg_iter(__last)); 225951a39d68df598db08dfced8b4707755864a0492Ying Wang } 226951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 227951a39d68df598db08dfced8b4707755864a0492Ying Wang 228951a39d68df598db08dfced8b4707755864a0492Ying Wang#if !defined (_STLP_MEMBER_TEMPLATES) 229951a39d68df598db08dfced8b4707755864a0492Ying Wang void insert(iterator __pos, const _Tp* __first, const _Tp* __last) { 230951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__pos)) 231951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_DEBUG_CHECK(_STLP_PRIV __check_ptr_range(__first, __last)) 232951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_non_dbg_impl.insert(__pos._M_iterator, __first, __last); 233951a39d68df598db08dfced8b4707755864a0492Ying Wang } 234951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 235951a39d68df598db08dfced8b4707755864a0492Ying Wang 236951a39d68df598db08dfced8b4707755864a0492Ying Wang#if !defined (_STLP_MEMBER_TEMPLATES) || !defined (_STLP_NO_METHOD_SPECIALIZATION) 237951a39d68df598db08dfced8b4707755864a0492Ying Wang void insert(iterator __pos, 238951a39d68df598db08dfced8b4707755864a0492Ying Wang const_iterator __first, const_iterator __last) { 239951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list, __pos)) 240951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last)) 241951a39d68df598db08dfced8b4707755864a0492Ying Wang# if (_STLP_DEBUG_LEVEL == _STLP_STANDARD_DBG_LEVEL) 242951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_STD_DEBUG_CHECK(__check_if_not_owner(&_M_iter_list, __first)) 243951a39d68df598db08dfced8b4707755864a0492Ying Wang# endif 244951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_non_dbg_impl.insert(__pos._M_iterator, __first._M_iterator, __last._M_iterator); 245951a39d68df598db08dfced8b4707755864a0492Ying Wang } 246951a39d68df598db08dfced8b4707755864a0492Ying Wang void insert(iterator __pos, 247951a39d68df598db08dfced8b4707755864a0492Ying Wang iterator __first, iterator __last) { 248951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list, __pos)) 249951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last)) 250951a39d68df598db08dfced8b4707755864a0492Ying Wang# if (_STLP_DEBUG_LEVEL == _STLP_STANDARD_DBG_LEVEL) 251951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_STD_DEBUG_CHECK(__check_if_not_owner(&_M_iter_list, __first)) 252951a39d68df598db08dfced8b4707755864a0492Ying Wang# endif 253951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_non_dbg_impl.insert(__pos._M_iterator, __first._M_iterator, __last._M_iterator); 254951a39d68df598db08dfced8b4707755864a0492Ying Wang } 255951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 256951a39d68df598db08dfced8b4707755864a0492Ying Wang 257951a39d68df598db08dfced8b4707755864a0492Ying Wang void insert(iterator __pos, size_type __n, const _Tp& __x) { 258951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__pos)) 259951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_non_dbg_impl.insert(__pos._M_iterator, __n, __x); 260951a39d68df598db08dfced8b4707755864a0492Ying Wang } 261951a39d68df598db08dfced8b4707755864a0492Ying Wang 262951a39d68df598db08dfced8b4707755864a0492Ying Wang void push_back(const_reference __x) { _M_non_dbg_impl.push_back(__x); } 263951a39d68df598db08dfced8b4707755864a0492Ying Wang void pop_back() { 264951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_VERBOSE_ASSERT(!empty(), _StlMsg_EMPTY_CONTAINER) 265951a39d68df598db08dfced8b4707755864a0492Ying Wang _Invalidate_iterator(end()); 266951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_non_dbg_impl.pop_back(); 267951a39d68df598db08dfced8b4707755864a0492Ying Wang } 268951a39d68df598db08dfced8b4707755864a0492Ying Wang 269951a39d68df598db08dfced8b4707755864a0492Ying Wang void push_front(const_reference __x) { _M_non_dbg_impl.push_front(__x); } 270951a39d68df598db08dfced8b4707755864a0492Ying Wang void pop_front() { 271951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_VERBOSE_ASSERT(!empty(), _StlMsg_EMPTY_CONTAINER) 272951a39d68df598db08dfced8b4707755864a0492Ying Wang _Invalidate_iterator(begin()); 273951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_non_dbg_impl.pop_front(); 274951a39d68df598db08dfced8b4707755864a0492Ying Wang } 275951a39d68df598db08dfced8b4707755864a0492Ying Wang 276951a39d68df598db08dfced8b4707755864a0492Ying Wang iterator erase(iterator __pos) { 277951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_DEBUG_CHECK(_STLP_PRIV _Dereferenceable(__pos)) 278951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__pos)) 279951a39d68df598db08dfced8b4707755864a0492Ying Wang _Invalidate_iterator(__pos); 280951a39d68df598db08dfced8b4707755864a0492Ying Wang return iterator(&_M_iter_list,_M_non_dbg_impl.erase(__pos._M_iterator)); 281951a39d68df598db08dfced8b4707755864a0492Ying Wang } 282951a39d68df598db08dfced8b4707755864a0492Ying Wang iterator erase(iterator __first, iterator __last) { 283951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last, begin(), end())) 284951a39d68df598db08dfced8b4707755864a0492Ying Wang _Invalidate_iterators(__first, __last); 285951a39d68df598db08dfced8b4707755864a0492Ying Wang return iterator (&_M_iter_list, _M_non_dbg_impl.erase(__first._M_iterator, __last._M_iterator)); 286951a39d68df598db08dfced8b4707755864a0492Ying Wang } 287951a39d68df598db08dfced8b4707755864a0492Ying Wang 288951a39d68df598db08dfced8b4707755864a0492Ying Wang#if !defined(_STLP_DONT_SUP_DFLT_PARAM) 289951a39d68df598db08dfced8b4707755864a0492Ying Wang void resize(size_type __new_size, const _Tp& __x = _Tp()) { 290951a39d68df598db08dfced8b4707755864a0492Ying Wang#else 291951a39d68df598db08dfced8b4707755864a0492Ying Wang void resize(size_type __new_size, const _Tp& __x) { 292951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif /*_STLP_DONT_SUP_DFLT_PARAM*/ 293951a39d68df598db08dfced8b4707755864a0492Ying Wang _Base_iterator __i = _M_non_dbg_impl.begin(); 294951a39d68df598db08dfced8b4707755864a0492Ying Wang size_type __len = 0; 295951a39d68df598db08dfced8b4707755864a0492Ying Wang for ( ; __i != _M_non_dbg_impl.end() && __len < __new_size; ++__i, ++__len); 296951a39d68df598db08dfced8b4707755864a0492Ying Wang 297951a39d68df598db08dfced8b4707755864a0492Ying Wang if (__len == __new_size) 298951a39d68df598db08dfced8b4707755864a0492Ying Wang erase(iterator(&_M_iter_list, __i), end()); 299951a39d68df598db08dfced8b4707755864a0492Ying Wang else // __i == end() 300951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_non_dbg_impl.insert(_M_non_dbg_impl.end(), __new_size - __len, __x); 301951a39d68df598db08dfced8b4707755864a0492Ying Wang } 302951a39d68df598db08dfced8b4707755864a0492Ying Wang 303951a39d68df598db08dfced8b4707755864a0492Ying Wang#if defined(_STLP_DONT_SUP_DFLT_PARAM) 304951a39d68df598db08dfced8b4707755864a0492Ying Wang void resize(size_type __new_size) { resize(__new_size, _STLP_DEFAULT_CONSTRUCTED(_Tp)); } 305951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 306951a39d68df598db08dfced8b4707755864a0492Ying Wang 307951a39d68df598db08dfced8b4707755864a0492Ying Wang#if defined (_STLP_MEMBER_TEMPLATES) 308951a39d68df598db08dfced8b4707755864a0492Ying Wang template <class _InputIterator> 309951a39d68df598db08dfced8b4707755864a0492Ying Wang void assign(_InputIterator __first, _InputIterator __last) { 310951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last)) 311951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_non_dbg_impl.assign(_STLP_PRIV _Non_Dbg_iter(__first), _STLP_PRIV _Non_Dbg_iter(__last)); 312951a39d68df598db08dfced8b4707755864a0492Ying Wang _Invalidate_iterators(begin(), end()); 313951a39d68df598db08dfced8b4707755864a0492Ying Wang } 314951a39d68df598db08dfced8b4707755864a0492Ying Wang#else 315951a39d68df598db08dfced8b4707755864a0492Ying Wang void assign(const _Tp* __first, const _Tp* __last) { 316951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_DEBUG_CHECK(_STLP_PRIV __check_ptr_range(__first, __last)) 317951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_non_dbg_impl.assign(__first, __last); 318951a39d68df598db08dfced8b4707755864a0492Ying Wang _Invalidate_iterators(begin(), end()); 319951a39d68df598db08dfced8b4707755864a0492Ying Wang } 320951a39d68df598db08dfced8b4707755864a0492Ying Wang 321951a39d68df598db08dfced8b4707755864a0492Ying Wang void assign(iterator __first, iterator __last) { 322951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last)) 323951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_non_dbg_impl.assign(__first._M_iterator, __last._M_iterator); 324951a39d68df598db08dfced8b4707755864a0492Ying Wang _Invalidate_iterators(begin(), end()); 325951a39d68df598db08dfced8b4707755864a0492Ying Wang } 326951a39d68df598db08dfced8b4707755864a0492Ying Wang 327951a39d68df598db08dfced8b4707755864a0492Ying Wang void assign(const_iterator __first, const_iterator __last) { 328951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last)) 329951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_non_dbg_impl.assign(__first._M_iterator, __last._M_iterator); 330951a39d68df598db08dfced8b4707755864a0492Ying Wang _Invalidate_iterators(begin(), end()); 331951a39d68df598db08dfced8b4707755864a0492Ying Wang } 332951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 333951a39d68df598db08dfced8b4707755864a0492Ying Wang 334951a39d68df598db08dfced8b4707755864a0492Ying Wang void assign(size_type __n, const _Tp& __val) { 335951a39d68df598db08dfced8b4707755864a0492Ying Wang _Invalidate_iterators(begin(), end()); 336951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_non_dbg_impl.assign(__n, __val); 337951a39d68df598db08dfced8b4707755864a0492Ying Wang } 338951a39d68df598db08dfced8b4707755864a0492Ying Wang 339951a39d68df598db08dfced8b4707755864a0492Ying Wang void remove(const _Tp& __x) { 340951a39d68df598db08dfced8b4707755864a0492Ying Wang _Base_iterator __first = _M_non_dbg_impl.begin(), __last = _M_non_dbg_impl.end(); 341951a39d68df598db08dfced8b4707755864a0492Ying Wang while (__first != __last) { 342951a39d68df598db08dfced8b4707755864a0492Ying Wang _Base_iterator __next = __first; 343951a39d68df598db08dfced8b4707755864a0492Ying Wang ++__next; 344951a39d68df598db08dfced8b4707755864a0492Ying Wang if (__x == *__first) { 345951a39d68df598db08dfced8b4707755864a0492Ying Wang _Invalidate_iterator(iterator(&_M_iter_list, __first)); 346951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_non_dbg_impl.erase(__first); 347951a39d68df598db08dfced8b4707755864a0492Ying Wang } 348951a39d68df598db08dfced8b4707755864a0492Ying Wang __first = __next; 349951a39d68df598db08dfced8b4707755864a0492Ying Wang } 350951a39d68df598db08dfced8b4707755864a0492Ying Wang } 351951a39d68df598db08dfced8b4707755864a0492Ying Wang 352951a39d68df598db08dfced8b4707755864a0492Ying Wang void clear() { 353951a39d68df598db08dfced8b4707755864a0492Ying Wang _Invalidate_iterators(begin(), end()); 354951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_non_dbg_impl.clear(); 355951a39d68df598db08dfced8b4707755864a0492Ying Wang } 356951a39d68df598db08dfced8b4707755864a0492Ying Wang 357951a39d68df598db08dfced8b4707755864a0492Ying Wangpublic: 358951a39d68df598db08dfced8b4707755864a0492Ying Wang void splice(iterator __pos, _Self& __x) { 359951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__pos)) 360951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_non_dbg_impl.splice(__pos._M_iterator, __x._M_non_dbg_impl); 361951a39d68df598db08dfced8b4707755864a0492Ying Wang#if (_STLP_DEBUG_LEVEL != _STLP_STANDARD_DBG_LEVEL) 362951a39d68df598db08dfced8b4707755864a0492Ying Wang if (get_allocator() == __x.get_allocator()) 363951a39d68df598db08dfced8b4707755864a0492Ying Wang __x._M_iter_list._Set_owner(_M_iter_list); 364951a39d68df598db08dfced8b4707755864a0492Ying Wang else 365951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 366951a39d68df598db08dfced8b4707755864a0492Ying Wang // Std: 23.2.2.4:4 367951a39d68df598db08dfced8b4707755864a0492Ying Wang // end iterator is not invalidated: 368951a39d68df598db08dfced8b4707755864a0492Ying Wang __x._Invalidate_iterators(__x.begin(), __x.end()); 369951a39d68df598db08dfced8b4707755864a0492Ying Wang } 370951a39d68df598db08dfced8b4707755864a0492Ying Wang 371951a39d68df598db08dfced8b4707755864a0492Ying Wang void splice(iterator __pos, _Self& __x, iterator __i) { 372951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__pos)) 373951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_DEBUG_CHECK(_STLP_PRIV _Dereferenceable(__i)) 374951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&(__x._M_iter_list),__i)) 375951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_non_dbg_impl.splice(__pos._M_iterator, __x._M_non_dbg_impl, __i._M_iterator); 376951a39d68df598db08dfced8b4707755864a0492Ying Wang#if (_STLP_DEBUG_LEVEL != _STLP_STANDARD_DBG_LEVEL) 377951a39d68df598db08dfced8b4707755864a0492Ying Wang if (get_allocator() == __x.get_allocator()) 378951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_PRIV __change_ite_owner(__i, &_M_iter_list); 379951a39d68df598db08dfced8b4707755864a0492Ying Wang else 380951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 381951a39d68df598db08dfced8b4707755864a0492Ying Wang // Std: 23.2.2.4:7 382951a39d68df598db08dfced8b4707755864a0492Ying Wang __x._Invalidate_iterator(__i); 383951a39d68df598db08dfced8b4707755864a0492Ying Wang } 384951a39d68df598db08dfced8b4707755864a0492Ying Wang 385951a39d68df598db08dfced8b4707755864a0492Ying Wang void splice(iterator __pos, _Self& __x, iterator __first, iterator __last) { 386951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list, __pos)) 387951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last, __x.begin(), __x.end())) 388951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_DEBUG_CHECK(this == &__x ? !_STLP_PRIV __check_range(__pos, __first, __last) : true) 389951a39d68df598db08dfced8b4707755864a0492Ying Wang#if (_STLP_DEBUG_LEVEL != _STLP_STANDARD_DBG_LEVEL) 390951a39d68df598db08dfced8b4707755864a0492Ying Wang if (this->get_allocator() == __x.get_allocator()) 391951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_PRIV __change_range_owner(__first, __last, &_M_iter_list); 392951a39d68df598db08dfced8b4707755864a0492Ying Wang else 393951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 394951a39d68df598db08dfced8b4707755864a0492Ying Wang // Std: 23.2.2.4:12 395951a39d68df598db08dfced8b4707755864a0492Ying Wang __x._Invalidate_iterators(__first, __last); 396951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_non_dbg_impl.splice(__pos._M_iterator, __x._M_non_dbg_impl, __first._M_iterator, __last._M_iterator); 397951a39d68df598db08dfced8b4707755864a0492Ying Wang } 398951a39d68df598db08dfced8b4707755864a0492Ying Wang 399951a39d68df598db08dfced8b4707755864a0492Ying Wang void merge(_Self& __x) { 400951a39d68df598db08dfced8b4707755864a0492Ying Wang#if !defined (_STLP_NO_EXTENSIONS) 401951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_DEBUG_CHECK(_STLP_STD::is_sorted(begin()._M_iterator, end()._M_iterator)) 402951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_DEBUG_CHECK(_STLP_STD::is_sorted(__x.begin()._M_iterator, __x.end()._M_iterator)) 403951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 404951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_non_dbg_impl.merge(__x._M_non_dbg_impl); 405951a39d68df598db08dfced8b4707755864a0492Ying Wang if (this->get_allocator() == __x.get_allocator()) { 406951a39d68df598db08dfced8b4707755864a0492Ying Wang __x._M_iter_list._Set_owner(_M_iter_list); 407951a39d68df598db08dfced8b4707755864a0492Ying Wang } 408951a39d68df598db08dfced8b4707755864a0492Ying Wang else { 409951a39d68df598db08dfced8b4707755864a0492Ying Wang __x._Invalidate_iterators(__x.begin(), __x.end()); 410951a39d68df598db08dfced8b4707755864a0492Ying Wang } 411951a39d68df598db08dfced8b4707755864a0492Ying Wang } 412951a39d68df598db08dfced8b4707755864a0492Ying Wang void reverse() { 413951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_non_dbg_impl.reverse(); 414951a39d68df598db08dfced8b4707755864a0492Ying Wang } 415951a39d68df598db08dfced8b4707755864a0492Ying Wang void unique() { 416951a39d68df598db08dfced8b4707755864a0492Ying Wang _Base_iterator __first = _M_non_dbg_impl.begin(), __last = _M_non_dbg_impl.end(); 417951a39d68df598db08dfced8b4707755864a0492Ying Wang if (__first == __last) return; 418951a39d68df598db08dfced8b4707755864a0492Ying Wang _Base_iterator __next = __first; 419951a39d68df598db08dfced8b4707755864a0492Ying Wang while (++__next != __last) { 420951a39d68df598db08dfced8b4707755864a0492Ying Wang if (*__first == *__next) { 421951a39d68df598db08dfced8b4707755864a0492Ying Wang _Invalidate_iterator(iterator(&_M_iter_list, __next)); 422951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_non_dbg_impl.erase(__next); 423951a39d68df598db08dfced8b4707755864a0492Ying Wang } 424951a39d68df598db08dfced8b4707755864a0492Ying Wang else 425951a39d68df598db08dfced8b4707755864a0492Ying Wang __first = __next; 426951a39d68df598db08dfced8b4707755864a0492Ying Wang __next = __first; 427951a39d68df598db08dfced8b4707755864a0492Ying Wang } 428951a39d68df598db08dfced8b4707755864a0492Ying Wang } 429951a39d68df598db08dfced8b4707755864a0492Ying Wang void sort() { 430951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_non_dbg_impl.sort(); 431951a39d68df598db08dfced8b4707755864a0492Ying Wang } 432951a39d68df598db08dfced8b4707755864a0492Ying Wang 433951a39d68df598db08dfced8b4707755864a0492Ying Wang#if defined (_STLP_MEMBER_TEMPLATES) 434951a39d68df598db08dfced8b4707755864a0492Ying Wang template <class _Predicate> 435951a39d68df598db08dfced8b4707755864a0492Ying Wang void remove_if(_Predicate __pred) { 436951a39d68df598db08dfced8b4707755864a0492Ying Wang _Base_iterator __first = _M_non_dbg_impl.begin(), __last = _M_non_dbg_impl.end(); 437951a39d68df598db08dfced8b4707755864a0492Ying Wang while (__first != __last) { 438951a39d68df598db08dfced8b4707755864a0492Ying Wang _Base_iterator __next = __first; 439951a39d68df598db08dfced8b4707755864a0492Ying Wang ++__next; 440951a39d68df598db08dfced8b4707755864a0492Ying Wang if (__pred(*__first)) { 441951a39d68df598db08dfced8b4707755864a0492Ying Wang _Invalidate_iterator(iterator(&_M_iter_list, __first)); 442951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_non_dbg_impl.erase(__first); 443951a39d68df598db08dfced8b4707755864a0492Ying Wang } 444951a39d68df598db08dfced8b4707755864a0492Ying Wang __first = __next; 445951a39d68df598db08dfced8b4707755864a0492Ying Wang } 446951a39d68df598db08dfced8b4707755864a0492Ying Wang } 447951a39d68df598db08dfced8b4707755864a0492Ying Wang 448951a39d68df598db08dfced8b4707755864a0492Ying Wang template <class _BinaryPredicate> 449951a39d68df598db08dfced8b4707755864a0492Ying Wang void unique(_BinaryPredicate __binary_pred) { 450951a39d68df598db08dfced8b4707755864a0492Ying Wang _Base_iterator __first = _M_non_dbg_impl.begin(), __last = _M_non_dbg_impl.end(); 451951a39d68df598db08dfced8b4707755864a0492Ying Wang if (__first == __last) return; 452951a39d68df598db08dfced8b4707755864a0492Ying Wang _Base_iterator __next = __first; 453951a39d68df598db08dfced8b4707755864a0492Ying Wang while (++__next != __last) { 454951a39d68df598db08dfced8b4707755864a0492Ying Wang if (__binary_pred(*__first, *__next)) { 455951a39d68df598db08dfced8b4707755864a0492Ying Wang _Invalidate_iterator(iterator(&_M_iter_list, __next)); 456951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_non_dbg_impl.erase(__next); 457951a39d68df598db08dfced8b4707755864a0492Ying Wang } 458951a39d68df598db08dfced8b4707755864a0492Ying Wang else 459951a39d68df598db08dfced8b4707755864a0492Ying Wang __first = __next; 460951a39d68df598db08dfced8b4707755864a0492Ying Wang __next = __first; 461951a39d68df598db08dfced8b4707755864a0492Ying Wang } 462951a39d68df598db08dfced8b4707755864a0492Ying Wang } 463951a39d68df598db08dfced8b4707755864a0492Ying Wang 464951a39d68df598db08dfced8b4707755864a0492Ying Wang template <class _StrictWeakOrdering> 465951a39d68df598db08dfced8b4707755864a0492Ying Wang void merge(_Self& __x, _StrictWeakOrdering __comp) { 466951a39d68df598db08dfced8b4707755864a0492Ying Wang#if !defined (_STLP_NO_EXTENSIONS) 467951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_DEBUG_CHECK(_STLP_STD::is_sorted(_M_non_dbg_impl.begin(), _M_non_dbg_impl.end(), __comp)) 468951a39d68df598db08dfced8b4707755864a0492Ying Wang _STLP_DEBUG_CHECK(_STLP_STD::is_sorted(__x.begin()._M_iterator, __x.end()._M_iterator, __comp)) 469951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 470951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_non_dbg_impl.merge(__x._M_non_dbg_impl, __comp); 471951a39d68df598db08dfced8b4707755864a0492Ying Wang if (this->get_allocator() == __x.get_allocator()) { 472951a39d68df598db08dfced8b4707755864a0492Ying Wang __x._M_iter_list._Set_owner(_M_iter_list); 473951a39d68df598db08dfced8b4707755864a0492Ying Wang } 474951a39d68df598db08dfced8b4707755864a0492Ying Wang else { 475951a39d68df598db08dfced8b4707755864a0492Ying Wang __x._Invalidate_iterators(__x.begin(), __x.end()); 476951a39d68df598db08dfced8b4707755864a0492Ying Wang } 477951a39d68df598db08dfced8b4707755864a0492Ying Wang } 478951a39d68df598db08dfced8b4707755864a0492Ying Wang 479951a39d68df598db08dfced8b4707755864a0492Ying Wang template <class _StrictWeakOrdering> 480951a39d68df598db08dfced8b4707755864a0492Ying Wang void sort(_StrictWeakOrdering __comp) { 481951a39d68df598db08dfced8b4707755864a0492Ying Wang _M_non_dbg_impl.sort(__comp); 482951a39d68df598db08dfced8b4707755864a0492Ying Wang } 483951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif 484951a39d68df598db08dfced8b4707755864a0492Ying Wang}; 485951a39d68df598db08dfced8b4707755864a0492Ying Wang 486951a39d68df598db08dfced8b4707755864a0492Ying Wang 487951a39d68df598db08dfced8b4707755864a0492Ying Wang_STLP_END_NAMESPACE 488951a39d68df598db08dfced8b4707755864a0492Ying Wang 489951a39d68df598db08dfced8b4707755864a0492Ying Wang#undef _STLP_NON_DBG_LIST 490951a39d68df598db08dfced8b4707755864a0492Ying Wang 491951a39d68df598db08dfced8b4707755864a0492Ying Wang#endif /* _STLP_INTERNAL_LIST_H */ 492951a39d68df598db08dfced8b4707755864a0492Ying Wang 493951a39d68df598db08dfced8b4707755864a0492Ying Wang// Local Variables: 494951a39d68df598db08dfced8b4707755864a0492Ying Wang// mode:C++ 495951a39d68df598db08dfced8b4707755864a0492Ying Wang// End: 496