111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (c) 1994 411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Hewlett-Packard Company 511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (c) 1996,1997 711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Silicon Graphics Computer Systems, Inc. 811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (c) 1997 1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Moscow Center for SPARC Technology 1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (c) 1999 1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Boris Fomitchev 1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * This material is provided "as is", with absolutely no warranty expressed 1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * or implied. Any use is at your own risk. 1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Permission to use or copy this software for any purpose is hereby granted 1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * without fee, provided the above notices are retained on all copies. 2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Permission to modify the code and to distribute modified code is granted, 2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * provided the above notices are retained, and a notice that the code was 2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * modified is included with the above copyright notice. 2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* NOTE: This is an internal header file, included by other STL headers. 2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * You should not attempt to use it directly. 2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _STLP_INTERNAL_DBG_LIST_H 3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _STLP_INTERNAL_DBG_LIST_H 3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _STLP_INTERNAL_ALGO_H 3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# include <stl/_algo.h> 3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _STLP_DBG_ITERATOR_H 3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# include <stl/debug/_iterator.h> 3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _STLP_NON_DBG_LIST _STLP_PRIV _STLP_NON_DBG_NAME(list) <_Tp, _Alloc> 4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_BEGIN_NAMESPACE 4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_DEBUG_USE_DISTINCT_VALUE_TYPE_HELPERS) 4611cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp, class _Alloc> 4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline _Tp* 4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvalue_type(const _STLP_PRIV _DBG_iter_base< _STLP_NON_DBG_LIST >&) 4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return (_Tp*)0; } 5011cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp, class _Alloc> 5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline bidirectional_iterator_tag 5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertiterator_category(const _STLP_PRIV _DBG_iter_base< _STLP_NON_DBG_LIST >&) 5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return bidirectional_iterator_tag(); } 5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5611cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp, _STLP_DFL_TMPL_PARAM(_Alloc, allocator<_Tp>) > 5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass list : 5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if !defined (__DMC__) 5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert private 6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_PRIV __construct_checker<_STLP_NON_DBG_LIST > 6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) 6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert , public __stlport_class<list<_Tp, _Alloc> > 6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef _STLP_NON_DBG_LIST _Base; 6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef list<_Tp, _Alloc> _Self; 6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef _STLP_PRIV __construct_checker<_STLP_NON_DBG_LIST > _ConstructCheck; 6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertpublic: 7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __IMPORT_CONTAINER_TYPEDEFS(_Base) 7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertpublic: 7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef _STLP_PRIV _DBG_iter<_Base, _STLP_PRIV _DbgTraits<_Nonconst_traits<value_type> > > iterator; 7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef _STLP_PRIV _DBG_iter<_Base, _STLP_PRIV _DbgTraits<_Const_traits<value_type> > > const_iterator; 7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DECLARE_BIDIRECTIONAL_REVERSE_ITERATORS; 7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertprivate: 8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Base _M_non_dbg_impl; 8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_PRIV __owned_list _M_iter_list; 8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void _Invalidate_iterator(const iterator& __it) 8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { _STLP_PRIV __invalidate_iterator(&_M_iter_list, __it); } 8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void _Invalidate_iterators(const iterator& __first, const iterator& __last) 8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { _STLP_PRIV __invalidate_range(&_M_iter_list, __first, __last); } 8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef typename _Base::iterator _Base_iterator; 8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertpublic: 9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert explicit list(const allocator_type& __a = allocator_type()) : 9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl(__a), _M_iter_list(&_M_non_dbg_impl) {} 9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if !defined(_STLP_DONT_SUP_DFLT_PARAM) 9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert explicit list(size_type __n, const _Tp& __x = _Tp(), 9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else 9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert list(size_type __n, const _Tp& __x, 9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /*!_STLP_DONT_SUP_DFLT_PARAM*/ 9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const allocator_type& __a = allocator_type()) 10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _M_non_dbg_impl(__n, __x, __a), _M_iter_list(&_M_non_dbg_impl) {} 10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined(_STLP_DONT_SUP_DFLT_PARAM) 10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert explicit list(size_type __n) 10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _M_non_dbg_impl(__n), _M_iter_list(&_M_non_dbg_impl) {} 10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /*_STLP_DONT_SUP_DFLT_PARAM*/ 10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if !defined (_STLP_NO_MOVE_SEMANTIC) 10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert list(__move_source<_Self> src) 10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _M_non_dbg_impl(__move_source<_Base>(src.get()._M_non_dbg_impl)), 11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_iter_list(&_M_non_dbg_impl) { 11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# if defined (_STLP_NO_EXTENSIONS) || (_STLP_DEBUG_LEVEL == _STLP_STANDARD_DBG_LEVEL) 11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert src.get()._M_iter_list._Invalidate_all(); 11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# else 11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert src.get()._M_iter_list._Set_owner(_M_iter_list); 11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# endif 11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_MEMBER_TEMPLATES) 12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _InputIterator> 12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert list(_InputIterator __first, _InputIterator __last, 12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const allocator_type& __a _STLP_ALLOCATOR_TYPE_DFL) 12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _ConstructCheck(__first, __last), 12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl(_STLP_PRIV _Non_Dbg_iter(__first), _STLP_PRIV _Non_Dbg_iter(__last), __a), 12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_iter_list(&_M_non_dbg_impl) {} 12611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# if defined (_STLP_NEEDS_EXTRA_TEMPLATE_CONSTRUCTORS) 12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _InputIterator> 12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert list(_InputIterator __first, _InputIterator __last) 12911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _ConstructCheck(__first, __last), 13011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl(_STLP_PRIV _Non_Dbg_iter(__first), _STLP_PRIV _Non_Dbg_iter(__last)), 13111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_iter_list(&_M_non_dbg_impl) {} 13211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# endif 13311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else 13411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 13511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert list(const value_type* __first, const value_type* __last, 13611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const allocator_type& __a = allocator_type()) 13711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _ConstructCheck(__first, __last), 13811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl(__first, __last, __a), 13911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_iter_list(&_M_non_dbg_impl) {} 14011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert list(const_iterator __first, const_iterator __last, 14111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const allocator_type& __a = allocator_type()) 14211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _ConstructCheck(__first, __last), 14311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl(__first._M_iterator, __last._M_iterator, __a), 14411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_iter_list(&_M_non_dbg_impl) {} 14511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 14611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 14711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 14811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert list(const _Self& __x) : 14911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _ConstructCheck(__x), 15011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl(__x._M_non_dbg_impl) , _M_iter_list(&_M_non_dbg_impl) {} 15111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 15211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator=(const _Self& __x) { 15311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (this != &__x) { 15411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert //Should not invalidate end iterator 15511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_iterators(begin(), end()); 15611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl = __x._M_non_dbg_impl; 15711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 15811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 15911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 16011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 16111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert allocator_type get_allocator() const { return _M_non_dbg_impl.get_allocator(); } 16211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 16311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert iterator begin() { return iterator(&_M_iter_list, _M_non_dbg_impl.begin()); } 16411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const_iterator begin() const { return const_iterator(&_M_iter_list, _M_non_dbg_impl.begin()); } 16511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 16611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert iterator end() { return iterator(&_M_iter_list, _M_non_dbg_impl.end()); } 16711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const_iterator end() const { return const_iterator(&_M_iter_list, _M_non_dbg_impl.end()); } 16811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 16911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert reverse_iterator rbegin() { return reverse_iterator(end()); } 17011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert reverse_iterator rend() { return reverse_iterator(begin()); } 17111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 17211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); } 17311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const_reverse_iterator rend() const { return const_reverse_iterator(begin()); } 17411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 17511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_type size() const { return _M_non_dbg_impl.size(); } 17611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_type max_size() const { return _M_non_dbg_impl.max_size(); } 17711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert bool empty() const { return _M_non_dbg_impl.empty(); } 17811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 17911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // those are here to enforce checking 18011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert reference front() { 18111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_VERBOSE_ASSERT(!empty(), _StlMsg_EMPTY_CONTAINER) 18211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *begin(); 18311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 18411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const_reference front() const { 18511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_VERBOSE_ASSERT(!empty(), _StlMsg_EMPTY_CONTAINER) 18611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *begin(); 18711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 18811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert reference back() { 18911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_VERBOSE_ASSERT(!empty(), _StlMsg_EMPTY_CONTAINER) 19011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *(--end()); 19111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 19211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const_reference back() const { 19311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_VERBOSE_ASSERT(!empty(), _StlMsg_EMPTY_CONTAINER) 19411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *(--end()); 19511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 19611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 19711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void swap(_Self& __x) { 19811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_iter_list._Swap_owners(__x._M_iter_list); 19911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.swap(__x._M_non_dbg_impl); 20011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 20111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER) 20211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void _M_swap_workaround(_Self& __x) { swap(__x); } 20311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 20411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 20511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if !defined(_STLP_DONT_SUP_DFLT_PARAM) && !defined(_STLP_NO_ANACHRONISMS) 20611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert iterator insert(iterator __pos, const _Tp& __x = _Tp()) { 20711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else 20811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert iterator insert(iterator __pos, const _Tp& __x) { 20911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /*!_STLP_DONT_SUP_DFLT_PARAM && !_STLP_NO_ANACHRONISMS*/ 21011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__pos)) 21111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return iterator(&_M_iter_list,_M_non_dbg_impl.insert(__pos._M_iterator, __x) ); 21211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 21311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 21411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined(_STLP_DONT_SUP_DFLT_PARAM) && !defined(_STLP_NO_ANACHRONISMS) 21511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert iterator insert(iterator __pos) { return insert(__pos, _STLP_DEFAULT_CONSTRUCTED(_Tp)); } 21611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /*_STLP_DONT_SUP_DFLT_PARAM && !_STLP_NO_ANACHRONISMS*/ 21711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 21811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_MEMBER_TEMPLATES) 21911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _InputIterator> 22011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void insert(iterator __pos, _InputIterator __first, _InputIterator __last) { 22111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list, __pos)) 22211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last)) 22311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.insert(__pos._M_iterator, 22411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_PRIV _Non_Dbg_iter(__first), _STLP_PRIV _Non_Dbg_iter(__last)); 22511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 22611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 22711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 22811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if !defined (_STLP_MEMBER_TEMPLATES) 22911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void insert(iterator __pos, const _Tp* __first, const _Tp* __last) { 23011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__pos)) 23111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_ptr_range(__first, __last)) 23211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.insert(__pos._M_iterator, __first, __last); 23311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 23411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 23511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 23611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if !defined (_STLP_MEMBER_TEMPLATES) || !defined (_STLP_NO_METHOD_SPECIALIZATION) 23711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void insert(iterator __pos, 23811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const_iterator __first, const_iterator __last) { 23911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list, __pos)) 24011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last)) 24111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# if (_STLP_DEBUG_LEVEL == _STLP_STANDARD_DBG_LEVEL) 24211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_STD_DEBUG_CHECK(__check_if_not_owner(&_M_iter_list, __first)) 24311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# endif 24411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.insert(__pos._M_iterator, __first._M_iterator, __last._M_iterator); 24511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 24611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void insert(iterator __pos, 24711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert iterator __first, iterator __last) { 24811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list, __pos)) 24911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last)) 25011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# if (_STLP_DEBUG_LEVEL == _STLP_STANDARD_DBG_LEVEL) 25111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_STD_DEBUG_CHECK(__check_if_not_owner(&_M_iter_list, __first)) 25211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# endif 25311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.insert(__pos._M_iterator, __first._M_iterator, __last._M_iterator); 25411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 25511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 25611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 25711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void insert(iterator __pos, size_type __n, const _Tp& __x) { 25811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__pos)) 25911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.insert(__pos._M_iterator, __n, __x); 26011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 26111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 26211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void push_back(const_reference __x) { _M_non_dbg_impl.push_back(__x); } 26311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void pop_back() { 26411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_VERBOSE_ASSERT(!empty(), _StlMsg_EMPTY_CONTAINER) 26511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_iterator(end()); 26611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.pop_back(); 26711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 26811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 26911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void push_front(const_reference __x) { _M_non_dbg_impl.push_front(__x); } 27011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void pop_front() { 27111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_VERBOSE_ASSERT(!empty(), _StlMsg_EMPTY_CONTAINER) 27211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_iterator(begin()); 27311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.pop_front(); 27411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 27511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 27611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert iterator erase(iterator __pos) { 27711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV _Dereferenceable(__pos)) 27811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__pos)) 27911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_iterator(__pos); 28011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return iterator(&_M_iter_list,_M_non_dbg_impl.erase(__pos._M_iterator)); 28111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 28211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert iterator erase(iterator __first, iterator __last) { 28311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last, begin(), end())) 28411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_iterators(__first, __last); 28511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return iterator (&_M_iter_list, _M_non_dbg_impl.erase(__first._M_iterator, __last._M_iterator)); 28611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 28711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 28811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if !defined(_STLP_DONT_SUP_DFLT_PARAM) 28911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void resize(size_type __new_size, const _Tp& __x = _Tp()) { 29011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else 29111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void resize(size_type __new_size, const _Tp& __x) { 29211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /*_STLP_DONT_SUP_DFLT_PARAM*/ 29311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Base_iterator __i = _M_non_dbg_impl.begin(); 29411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_type __len = 0; 29511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert for ( ; __i != _M_non_dbg_impl.end() && __len < __new_size; ++__i, ++__len); 29611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 29711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (__len == __new_size) 29811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert erase(iterator(&_M_iter_list, __i), end()); 29911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert else // __i == end() 30011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.insert(_M_non_dbg_impl.end(), __new_size - __len, __x); 30111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 30211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 30311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined(_STLP_DONT_SUP_DFLT_PARAM) 30411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void resize(size_type __new_size) { resize(__new_size, _STLP_DEFAULT_CONSTRUCTED(_Tp)); } 30511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 30611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 30711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_MEMBER_TEMPLATES) 30811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _InputIterator> 30911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void assign(_InputIterator __first, _InputIterator __last) { 31011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last)) 31111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.assign(_STLP_PRIV _Non_Dbg_iter(__first), _STLP_PRIV _Non_Dbg_iter(__last)); 31211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_iterators(begin(), end()); 31311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 31411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else 31511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void assign(const _Tp* __first, const _Tp* __last) { 31611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_ptr_range(__first, __last)) 31711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.assign(__first, __last); 31811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_iterators(begin(), end()); 31911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 32011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 32111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void assign(iterator __first, iterator __last) { 32211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last)) 32311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.assign(__first._M_iterator, __last._M_iterator); 32411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_iterators(begin(), end()); 32511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 32611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 32711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void assign(const_iterator __first, const_iterator __last) { 32811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last)) 32911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.assign(__first._M_iterator, __last._M_iterator); 33011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_iterators(begin(), end()); 33111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 33211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 33311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 33411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void assign(size_type __n, const _Tp& __val) { 33511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_iterators(begin(), end()); 33611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.assign(__n, __val); 33711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 33811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 33911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void remove(const _Tp& __x) { 34011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Base_iterator __first = _M_non_dbg_impl.begin(), __last = _M_non_dbg_impl.end(); 34111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert while (__first != __last) { 34211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Base_iterator __next = __first; 34311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ++__next; 34411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (__x == *__first) { 34511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_iterator(iterator(&_M_iter_list, __first)); 34611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.erase(__first); 34711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 34811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __first = __next; 34911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 35011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 35111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 35211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void clear() { 35311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_iterators(begin(), end()); 35411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.clear(); 35511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 35611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 35711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertpublic: 35811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void splice(iterator __pos, _Self& __x) { 35911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__pos)) 36011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.splice(__pos._M_iterator, __x._M_non_dbg_impl); 36111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if (_STLP_DEBUG_LEVEL != _STLP_STANDARD_DBG_LEVEL) 36211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (get_allocator() == __x.get_allocator()) 36311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __x._M_iter_list._Set_owner(_M_iter_list); 36411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert else 36511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 36611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Std: 23.2.2.4:4 36711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // end iterator is not invalidated: 36811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __x._Invalidate_iterators(__x.begin(), __x.end()); 36911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 37011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 37111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void splice(iterator __pos, _Self& __x, iterator __i) { 37211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__pos)) 37311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV _Dereferenceable(__i)) 37411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&(__x._M_iter_list),__i)) 37511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.splice(__pos._M_iterator, __x._M_non_dbg_impl, __i._M_iterator); 37611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if (_STLP_DEBUG_LEVEL != _STLP_STANDARD_DBG_LEVEL) 37711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (get_allocator() == __x.get_allocator()) 37811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_PRIV __change_ite_owner(__i, &_M_iter_list); 37911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert else 38011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 38111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Std: 23.2.2.4:7 38211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __x._Invalidate_iterator(__i); 38311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 38411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 38511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void splice(iterator __pos, _Self& __x, iterator __first, iterator __last) { 38611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list, __pos)) 38711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last, __x.begin(), __x.end())) 38811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(this == &__x ? !_STLP_PRIV __check_range(__pos, __first, __last) : true) 38911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if (_STLP_DEBUG_LEVEL != _STLP_STANDARD_DBG_LEVEL) 39011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (this->get_allocator() == __x.get_allocator()) 39111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_PRIV __change_range_owner(__first, __last, &_M_iter_list); 39211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert else 39311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 39411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Std: 23.2.2.4:12 39511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __x._Invalidate_iterators(__first, __last); 39611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.splice(__pos._M_iterator, __x._M_non_dbg_impl, __first._M_iterator, __last._M_iterator); 39711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 39811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 39911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void merge(_Self& __x) { 40011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if !defined (_STLP_NO_EXTENSIONS) 40111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_STD::is_sorted(begin()._M_iterator, end()._M_iterator)) 40211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_STD::is_sorted(__x.begin()._M_iterator, __x.end()._M_iterator)) 40311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 40411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.merge(__x._M_non_dbg_impl); 40511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (this->get_allocator() == __x.get_allocator()) { 40611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __x._M_iter_list._Set_owner(_M_iter_list); 40711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 40811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert else { 40911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __x._Invalidate_iterators(__x.begin(), __x.end()); 41011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 41111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 41211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void reverse() { 41311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.reverse(); 41411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 41511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void unique() { 41611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Base_iterator __first = _M_non_dbg_impl.begin(), __last = _M_non_dbg_impl.end(); 41711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (__first == __last) return; 41811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Base_iterator __next = __first; 41911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert while (++__next != __last) { 42011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (*__first == *__next) { 42111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_iterator(iterator(&_M_iter_list, __next)); 42211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.erase(__next); 42311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 42411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert else 42511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __first = __next; 42611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __next = __first; 42711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 42811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 42911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void sort() { 43011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.sort(); 43111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 43211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 43311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_MEMBER_TEMPLATES) 43411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _Predicate> 43511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void remove_if(_Predicate __pred) { 43611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Base_iterator __first = _M_non_dbg_impl.begin(), __last = _M_non_dbg_impl.end(); 43711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert while (__first != __last) { 43811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Base_iterator __next = __first; 43911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ++__next; 44011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (__pred(*__first)) { 44111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_iterator(iterator(&_M_iter_list, __first)); 44211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.erase(__first); 44311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 44411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __first = __next; 44511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 44611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 44711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 44811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _BinaryPredicate> 44911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void unique(_BinaryPredicate __binary_pred) { 45011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Base_iterator __first = _M_non_dbg_impl.begin(), __last = _M_non_dbg_impl.end(); 45111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (__first == __last) return; 45211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Base_iterator __next = __first; 45311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert while (++__next != __last) { 45411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (__binary_pred(*__first, *__next)) { 45511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_iterator(iterator(&_M_iter_list, __next)); 45611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.erase(__next); 45711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 45811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert else 45911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __first = __next; 46011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __next = __first; 46111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 46211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 46311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 46411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _StrictWeakOrdering> 46511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void merge(_Self& __x, _StrictWeakOrdering __comp) { 46611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if !defined (_STLP_NO_EXTENSIONS) 46711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_STD::is_sorted(_M_non_dbg_impl.begin(), _M_non_dbg_impl.end(), __comp)) 46811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_STD::is_sorted(__x.begin()._M_iterator, __x.end()._M_iterator, __comp)) 46911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 47011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.merge(__x._M_non_dbg_impl, __comp); 47111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (this->get_allocator() == __x.get_allocator()) { 47211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __x._M_iter_list._Set_owner(_M_iter_list); 47311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 47411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert else { 47511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __x._Invalidate_iterators(__x.begin(), __x.end()); 47611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 47711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 47811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 47911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _StrictWeakOrdering> 48011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void sort(_StrictWeakOrdering __comp) { 48111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.sort(__comp); 48211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 48311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 48411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 48511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 48611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 48711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_END_NAMESPACE 48811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 48911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#undef _STLP_NON_DBG_LIST 49011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 49111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /* _STLP_INTERNAL_LIST_H */ 49211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 49311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Local Variables: 49411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// mode:C++ 49511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// End: 496