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