137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh/*
237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh *
337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh * Copyright (c) 1994
437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh * Hewlett-Packard Company
537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh *
637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh * Copyright (c) 1996,1997
737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh * Silicon Graphics Computer Systems, Inc.
837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh *
937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh * Copyright (c) 1997
1037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh * Moscow Center for SPARC Technology
1137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh *
1237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh * Copyright (c) 1999
1337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh * Boris Fomitchev
1437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh *
1537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh * This material is provided "as is", with absolutely no warranty expressed
1637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh * or implied. Any use is at your own risk.
1737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh *
1837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh * Permission to use or copy this software for any purpose is hereby granted
1937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh * without fee, provided the above notices are retained on all copies.
2037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh * Permission to modify the code and to distribute modified code is granted,
2137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh * provided the above notices are retained, and a notice that the code was
2237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh * modified is included with the above copyright notice.
2337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh *
2437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh */
2537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
2637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh/* NOTE: This is an internal header file, included by other STL headers.
2737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh *   You should not attempt to use it directly.
2837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh */
2937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
3037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#ifndef _STLP_INTERNAL_DBG_LIST_H
3137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#define _STLP_INTERNAL_DBG_LIST_H
3237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
3337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#ifndef _STLP_INTERNAL_ALGO_H
3437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#  include <stl/_algo.h>
3537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#endif
3637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
3737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#ifndef _STLP_DBG_ITERATOR_H
3837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#  include <stl/debug/_iterator.h>
3937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#endif
4037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
4137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#define _STLP_NON_DBG_LIST _STLP_PRIV _STLP_NON_DBG_NAME(list) <_Tp, _Alloc>
4237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
4337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh_STLP_BEGIN_NAMESPACE
4437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
4537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#if defined (_STLP_DEBUG_USE_DISTINCT_VALUE_TYPE_HELPERS)
4637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsiehtemplate <class _Tp, class _Alloc>
4737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsiehinline _Tp*
4837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsiehvalue_type(const _STLP_PRIV _DBG_iter_base< _STLP_NON_DBG_LIST >&)
4937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh{ return (_Tp*)0; }
5037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsiehtemplate <class _Tp, class _Alloc>
5137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsiehinline bidirectional_iterator_tag
5237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsiehiterator_category(const _STLP_PRIV _DBG_iter_base< _STLP_NON_DBG_LIST >&)
5337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh{ return bidirectional_iterator_tag(); }
5437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#endif
5537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
5637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsiehtemplate <class _Tp, _STLP_DFL_TMPL_PARAM(_Alloc, allocator<_Tp>) >
5737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsiehclass list :
5837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#if !defined (__DMC__)
5937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh             private
6037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#endif
6137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh                     _STLP_PRIV __construct_checker<_STLP_NON_DBG_LIST >
6237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND)
6337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh           , public __stlport_class<list<_Tp, _Alloc> >
6437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#endif
6537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh{
6637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  typedef _STLP_NON_DBG_LIST _Base;
6737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  typedef list<_Tp, _Alloc> _Self;
6837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  typedef _STLP_PRIV __construct_checker<_STLP_NON_DBG_LIST > _ConstructCheck;
6937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
7037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsiehpublic:
7137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  __IMPORT_CONTAINER_TYPEDEFS(_Base)
7237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
7337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsiehpublic:
7437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  typedef _STLP_PRIV _DBG_iter<_Base, _STLP_PRIV _DbgTraits<_Nonconst_traits<value_type> > > iterator;
7537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  typedef _STLP_PRIV _DBG_iter<_Base, _STLP_PRIV _DbgTraits<_Const_traits<value_type> > >    const_iterator;
7637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
7737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  _STLP_DECLARE_BIDIRECTIONAL_REVERSE_ITERATORS;
7837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
7937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsiehprivate:
8037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  _Base _M_non_dbg_impl;
8137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  _STLP_PRIV __owned_list _M_iter_list;
8237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
8337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  void _Invalidate_iterator(const iterator& __it)
8437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  { _STLP_PRIV __invalidate_iterator(&_M_iter_list, __it); }
8537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  void _Invalidate_iterators(const iterator& __first, const iterator& __last)
8637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  { _STLP_PRIV __invalidate_range(&_M_iter_list, __first, __last); }
8737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
8837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  typedef typename _Base::iterator _Base_iterator;
8937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
9037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsiehpublic:
9137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  explicit list(const allocator_type& __a = allocator_type()) :
9237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _M_non_dbg_impl(__a), _M_iter_list(&_M_non_dbg_impl) {}
9337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
9437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#if !defined(_STLP_DONT_SUP_DFLT_PARAM)
9537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  explicit list(size_type __n, const _Tp& __x = _Tp(),
9637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#else
9737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  list(size_type __n, const _Tp& __x,
9837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#endif /*!_STLP_DONT_SUP_DFLT_PARAM*/
9937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh            const allocator_type& __a = allocator_type())
10037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    : _M_non_dbg_impl(__n, __x, __a), _M_iter_list(&_M_non_dbg_impl) {}
10137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
10237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#if defined(_STLP_DONT_SUP_DFLT_PARAM)
10337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  explicit list(size_type __n)
10437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    : _M_non_dbg_impl(__n), _M_iter_list(&_M_non_dbg_impl) {}
10537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#endif /*_STLP_DONT_SUP_DFLT_PARAM*/
10637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
10737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#if !defined (_STLP_NO_MOVE_SEMANTIC)
10837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  list(__move_source<_Self> src)
10937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    : _M_non_dbg_impl(__move_source<_Base>(src.get()._M_non_dbg_impl)),
11037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      _M_iter_list(&_M_non_dbg_impl) {
11137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#  if defined (_STLP_NO_EXTENSIONS) || (_STLP_DEBUG_LEVEL == _STLP_STANDARD_DBG_LEVEL)
11237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    src.get()._M_iter_list._Invalidate_all();
11337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#  else
11437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    src.get()._M_iter_list._Set_owner(_M_iter_list);
11537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#  endif
11637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
11737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#endif
11837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
11937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#if defined (_STLP_MEMBER_TEMPLATES)
12037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  template <class _InputIterator>
12137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  list(_InputIterator __first, _InputIterator __last,
12237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh       const allocator_type& __a _STLP_ALLOCATOR_TYPE_DFL)
12337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    : _ConstructCheck(__first, __last),
12437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      _M_non_dbg_impl(_STLP_PRIV _Non_Dbg_iter(__first), _STLP_PRIV _Non_Dbg_iter(__last), __a),
12537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      _M_iter_list(&_M_non_dbg_impl) {}
12637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#  if defined (_STLP_NEEDS_EXTRA_TEMPLATE_CONSTRUCTORS)
12737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  template <class _InputIterator>
12837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  list(_InputIterator __first, _InputIterator __last)
12937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    : _ConstructCheck(__first, __last),
13037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      _M_non_dbg_impl(_STLP_PRIV _Non_Dbg_iter(__first), _STLP_PRIV _Non_Dbg_iter(__last)),
13137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      _M_iter_list(&_M_non_dbg_impl) {}
13237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#  endif
13337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#else
13437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
13537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  list(const value_type* __first, const value_type* __last,
13637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh       const allocator_type& __a = allocator_type())
13737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    : _ConstructCheck(__first, __last),
13837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      _M_non_dbg_impl(__first, __last, __a),
13937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      _M_iter_list(&_M_non_dbg_impl) {}
14037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  list(const_iterator __first, const_iterator __last,
14137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh       const allocator_type& __a = allocator_type())
14237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    : _ConstructCheck(__first, __last),
14337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      _M_non_dbg_impl(__first._M_iterator, __last._M_iterator, __a),
14437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      _M_iter_list(&_M_non_dbg_impl) {}
14537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
14637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#endif
14737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
14837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  list(const _Self& __x) :
14937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _ConstructCheck(__x),
15037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _M_non_dbg_impl(__x._M_non_dbg_impl) , _M_iter_list(&_M_non_dbg_impl) {}
15137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
15237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  _Self& operator=(const _Self& __x) {
15337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    if (this != &__x) {
15437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      //Should not invalidate end iterator
15537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      _Invalidate_iterators(begin(), end());
15637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      _M_non_dbg_impl = __x._M_non_dbg_impl;
15737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    }
15837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    return *this;
15937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
16037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
16137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  allocator_type get_allocator() const { return _M_non_dbg_impl.get_allocator(); }
16237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
16337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  iterator begin()             { return iterator(&_M_iter_list, _M_non_dbg_impl.begin()); }
16437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  const_iterator begin() const { return const_iterator(&_M_iter_list, _M_non_dbg_impl.begin()); }
16537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
16637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  iterator end()               { return iterator(&_M_iter_list, _M_non_dbg_impl.end()); }
16737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  const_iterator end() const   { return const_iterator(&_M_iter_list, _M_non_dbg_impl.end()); }
16837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
16937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  reverse_iterator rbegin()    { return reverse_iterator(end()); }
17037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  reverse_iterator rend()      { return reverse_iterator(begin()); }
17137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
17237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); }
17337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  const_reverse_iterator rend() const { return const_reverse_iterator(begin()); }
17437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
17537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  size_type size() const { return _M_non_dbg_impl.size(); }
17637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  size_type max_size() const { return _M_non_dbg_impl.max_size(); }
17737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  bool empty() const { return _M_non_dbg_impl.empty(); }
17837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
17937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  // those are here to enforce checking
18037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  reference front() {
18137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_VERBOSE_ASSERT(!empty(), _StlMsg_EMPTY_CONTAINER)
18237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    return *begin();
18337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
18437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  const_reference front() const {
18537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_VERBOSE_ASSERT(!empty(), _StlMsg_EMPTY_CONTAINER)
18637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    return *begin();
18737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
18837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  reference back() {
18937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_VERBOSE_ASSERT(!empty(), _StlMsg_EMPTY_CONTAINER)
19037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    return *(--end());
19137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
19237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  const_reference back() const {
19337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_VERBOSE_ASSERT(!empty(), _StlMsg_EMPTY_CONTAINER)
19437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    return *(--end());
19537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
19637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
19737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  void swap(_Self& __x) {
19837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _M_iter_list._Swap_owners(__x._M_iter_list);
19937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _M_non_dbg_impl.swap(__x._M_non_dbg_impl);
20037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
20137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER)
20237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  void _M_swap_workaround(_Self& __x) { swap(__x); }
20337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#endif
20437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
20537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#if !defined(_STLP_DONT_SUP_DFLT_PARAM) && !defined(_STLP_NO_ANACHRONISMS)
20637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  iterator insert(iterator __pos, const _Tp& __x = _Tp()) {
20737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#else
20837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  iterator insert(iterator __pos, const _Tp& __x) {
20937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#endif /*!_STLP_DONT_SUP_DFLT_PARAM && !_STLP_NO_ANACHRONISMS*/
21037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__pos))
21137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    return iterator(&_M_iter_list,_M_non_dbg_impl.insert(__pos._M_iterator, __x) );
21237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
21337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
21437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#if defined(_STLP_DONT_SUP_DFLT_PARAM) && !defined(_STLP_NO_ANACHRONISMS)
21537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  iterator insert(iterator __pos) { return insert(__pos, _STLP_DEFAULT_CONSTRUCTED(_Tp)); }
21637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#endif /*_STLP_DONT_SUP_DFLT_PARAM && !_STLP_NO_ANACHRONISMS*/
21737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
21837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#if defined (_STLP_MEMBER_TEMPLATES)
21937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  template <class _InputIterator>
22037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  void insert(iterator __pos, _InputIterator __first, _InputIterator __last) {
22137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list, __pos))
22237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
22337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _M_non_dbg_impl.insert(__pos._M_iterator,
22437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh                           _STLP_PRIV _Non_Dbg_iter(__first), _STLP_PRIV _Non_Dbg_iter(__last));
22537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
22637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#endif
22737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
22837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#if !defined (_STLP_MEMBER_TEMPLATES)
22937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  void insert(iterator __pos, const _Tp* __first, const _Tp* __last) {
23037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__pos))
23137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_DEBUG_CHECK(_STLP_PRIV __check_ptr_range(__first, __last))
23237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _M_non_dbg_impl.insert(__pos._M_iterator, __first, __last);
23337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
23437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#endif
23537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
23637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#if !defined (_STLP_MEMBER_TEMPLATES) || !defined (_STLP_NO_METHOD_SPECIALIZATION)
23737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  void insert(iterator __pos,
23837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh              const_iterator __first, const_iterator __last) {
23937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list, __pos))
24037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
24137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#  if (_STLP_DEBUG_LEVEL == _STLP_STANDARD_DBG_LEVEL)
24237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_STD_DEBUG_CHECK(__check_if_not_owner(&_M_iter_list, __first))
24337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#  endif
24437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _M_non_dbg_impl.insert(__pos._M_iterator, __first._M_iterator, __last._M_iterator);
24537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
24637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  void insert(iterator __pos,
24737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh              iterator __first, iterator __last) {
24837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list, __pos))
24937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
25037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#  if (_STLP_DEBUG_LEVEL == _STLP_STANDARD_DBG_LEVEL)
25137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_STD_DEBUG_CHECK(__check_if_not_owner(&_M_iter_list, __first))
25237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#  endif
25337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _M_non_dbg_impl.insert(__pos._M_iterator, __first._M_iterator, __last._M_iterator);
25437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
25537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#endif
25637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
25737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  void insert(iterator __pos, size_type __n, const _Tp& __x) {
25837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__pos))
25937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _M_non_dbg_impl.insert(__pos._M_iterator, __n, __x);
26037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
26137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
26237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  void push_back(const_reference __x) { _M_non_dbg_impl.push_back(__x); }
26337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  void pop_back() {
26437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_VERBOSE_ASSERT(!empty(), _StlMsg_EMPTY_CONTAINER)
26537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _Invalidate_iterator(end());
26637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _M_non_dbg_impl.pop_back();
26737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
26837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
26937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  void push_front(const_reference __x) { _M_non_dbg_impl.push_front(__x); }
27037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  void pop_front() {
27137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_VERBOSE_ASSERT(!empty(), _StlMsg_EMPTY_CONTAINER)
27237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _Invalidate_iterator(begin());
27337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _M_non_dbg_impl.pop_front();
27437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
27537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
27637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  iterator erase(iterator __pos) {
27737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_DEBUG_CHECK(_STLP_PRIV _Dereferenceable(__pos))
27837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__pos))
27937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _Invalidate_iterator(__pos);
28037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    return iterator(&_M_iter_list,_M_non_dbg_impl.erase(__pos._M_iterator));
28137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
28237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  iterator erase(iterator __first, iterator __last) {
28337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last, begin(), end()))
28437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _Invalidate_iterators(__first, __last);
28537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    return iterator (&_M_iter_list, _M_non_dbg_impl.erase(__first._M_iterator, __last._M_iterator));
28637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
28737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
28837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#if !defined(_STLP_DONT_SUP_DFLT_PARAM)
28937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  void resize(size_type __new_size, const _Tp& __x = _Tp()) {
29037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#else
29137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  void resize(size_type __new_size, const _Tp& __x) {
29237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#endif /*_STLP_DONT_SUP_DFLT_PARAM*/
29337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _Base_iterator __i = _M_non_dbg_impl.begin();
29437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    size_type __len = 0;
29537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    for ( ; __i != _M_non_dbg_impl.end() && __len < __new_size; ++__i, ++__len);
29637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
29737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    if (__len == __new_size)
29837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      erase(iterator(&_M_iter_list, __i), end());
29937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    else                          // __i == end()
30037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      _M_non_dbg_impl.insert(_M_non_dbg_impl.end(), __new_size - __len, __x);
30137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
30237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
30337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#if defined(_STLP_DONT_SUP_DFLT_PARAM)
30437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  void resize(size_type __new_size) { resize(__new_size, _STLP_DEFAULT_CONSTRUCTED(_Tp)); }
30537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#endif
30637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
30737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#if defined (_STLP_MEMBER_TEMPLATES)
30837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  template <class _InputIterator>
30937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  void assign(_InputIterator __first, _InputIterator __last) {
31037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
31137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _M_non_dbg_impl.assign(_STLP_PRIV _Non_Dbg_iter(__first), _STLP_PRIV _Non_Dbg_iter(__last));
31237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _Invalidate_iterators(begin(), end());
31337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
31437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#else
31537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  void assign(const _Tp* __first, const _Tp* __last) {
31637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_DEBUG_CHECK(_STLP_PRIV __check_ptr_range(__first, __last))
31737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _M_non_dbg_impl.assign(__first, __last);
31837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _Invalidate_iterators(begin(), end());
31937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
32037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
32137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  void assign(iterator __first, iterator __last) {
32237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
32337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _M_non_dbg_impl.assign(__first._M_iterator, __last._M_iterator);
32437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _Invalidate_iterators(begin(), end());
32537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
32637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
32737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  void assign(const_iterator __first, const_iterator __last) {
32837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
32937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _M_non_dbg_impl.assign(__first._M_iterator, __last._M_iterator);
33037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _Invalidate_iterators(begin(), end());
33137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
33237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#endif
33337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
33437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  void assign(size_type __n, const _Tp& __val) {
33537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _Invalidate_iterators(begin(), end());
33637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _M_non_dbg_impl.assign(__n, __val);
33737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
33837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
33937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  void remove(const _Tp& __x) {
34037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _Base_iterator __first = _M_non_dbg_impl.begin(), __last = _M_non_dbg_impl.end();
34137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    while (__first != __last) {
34237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      _Base_iterator __next = __first;
34337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      ++__next;
34437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      if (__x == *__first) {
34537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh        _Invalidate_iterator(iterator(&_M_iter_list, __first));
34637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh        _M_non_dbg_impl.erase(__first);
34737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      }
34837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      __first = __next;
34937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    }
35037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
35137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
35237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  void clear() {
35337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _Invalidate_iterators(begin(), end());
35437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _M_non_dbg_impl.clear();
35537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
35637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
35737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsiehpublic:
35837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  void splice(iterator __pos, _Self& __x) {
35937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__pos))
36037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _M_non_dbg_impl.splice(__pos._M_iterator, __x._M_non_dbg_impl);
36137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#if (_STLP_DEBUG_LEVEL != _STLP_STANDARD_DBG_LEVEL)
36237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    if (get_allocator() == __x.get_allocator())
36337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      __x._M_iter_list._Set_owner(_M_iter_list);
36437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    else
36537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#endif
36637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      // Std: 23.2.2.4:4
36737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      // end iterator is not invalidated:
36837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      __x._Invalidate_iterators(__x.begin(), __x.end());
36937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
37037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
37137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  void splice(iterator __pos, _Self& __x, iterator __i) {
37237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__pos))
37337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_DEBUG_CHECK(_STLP_PRIV _Dereferenceable(__i))
37437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&(__x._M_iter_list),__i))
37537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _M_non_dbg_impl.splice(__pos._M_iterator, __x._M_non_dbg_impl, __i._M_iterator);
37637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#if (_STLP_DEBUG_LEVEL != _STLP_STANDARD_DBG_LEVEL)
37737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    if (get_allocator() == __x.get_allocator())
37837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      _STLP_PRIV __change_ite_owner(__i, &_M_iter_list);
37937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    else
38037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#endif
38137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      // Std: 23.2.2.4:7
38237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      __x._Invalidate_iterator(__i);
38337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
38437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
38537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  void splice(iterator __pos, _Self& __x, iterator __first, iterator __last) {
38637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list, __pos))
38737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last, __x.begin(), __x.end()))
38837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_DEBUG_CHECK(this == &__x ? !_STLP_PRIV __check_range(__pos, __first, __last) : true)
38937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#if (_STLP_DEBUG_LEVEL != _STLP_STANDARD_DBG_LEVEL)
39037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    if (this->get_allocator() == __x.get_allocator())
39137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      _STLP_PRIV __change_range_owner(__first, __last, &_M_iter_list);
39237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    else
39337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#endif
39437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      // Std: 23.2.2.4:12
39537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      __x._Invalidate_iterators(__first, __last);
39637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _M_non_dbg_impl.splice(__pos._M_iterator, __x._M_non_dbg_impl, __first._M_iterator, __last._M_iterator);
39737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
39837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
39937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  void merge(_Self& __x) {
40037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#if !defined (_STLP_NO_EXTENSIONS)
40137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_DEBUG_CHECK(_STLP_STD::is_sorted(begin()._M_iterator, end()._M_iterator))
40237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_DEBUG_CHECK(_STLP_STD::is_sorted(__x.begin()._M_iterator, __x.end()._M_iterator))
40337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#endif
40437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _M_non_dbg_impl.merge(__x._M_non_dbg_impl);
40537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    if (this->get_allocator() == __x.get_allocator()) {
40637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      __x._M_iter_list._Set_owner(_M_iter_list);
40737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    }
40837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    else {
40937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      __x._Invalidate_iterators(__x.begin(), __x.end());
41037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    }
41137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
41237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  void reverse() {
41337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _M_non_dbg_impl.reverse();
41437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
41537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  void unique() {
41637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _Base_iterator __first = _M_non_dbg_impl.begin(), __last = _M_non_dbg_impl.end();
41737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    if (__first == __last) return;
41837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _Base_iterator __next = __first;
41937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    while (++__next != __last) {
42037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      if (*__first == *__next) {
42137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh        _Invalidate_iterator(iterator(&_M_iter_list, __next));
42237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh        _M_non_dbg_impl.erase(__next);
42337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      }
42437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      else
42537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh        __first = __next;
42637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      __next = __first;
42737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    }
42837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
42937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  void sort() {
43037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _M_non_dbg_impl.sort();
43137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
43237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
43337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#if defined (_STLP_MEMBER_TEMPLATES)
43437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  template <class _Predicate>
43537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  void remove_if(_Predicate __pred) {
43637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _Base_iterator __first = _M_non_dbg_impl.begin(), __last = _M_non_dbg_impl.end();
43737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    while (__first != __last) {
43837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      _Base_iterator __next = __first;
43937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      ++__next;
44037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      if (__pred(*__first)) {
44137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh        _Invalidate_iterator(iterator(&_M_iter_list, __first));
44237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh        _M_non_dbg_impl.erase(__first);
44337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      }
44437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      __first = __next;
44537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    }
44637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
44737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
44837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  template <class _BinaryPredicate>
44937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  void unique(_BinaryPredicate __binary_pred) {
45037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _Base_iterator __first = _M_non_dbg_impl.begin(), __last = _M_non_dbg_impl.end();
45137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    if (__first == __last) return;
45237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _Base_iterator __next = __first;
45337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    while (++__next != __last) {
45437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      if (__binary_pred(*__first, *__next)) {
45537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh        _Invalidate_iterator(iterator(&_M_iter_list, __next));
45637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh        _M_non_dbg_impl.erase(__next);
45737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      }
45837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      else
45937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh        __first = __next;
46037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      __next = __first;
46137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    }
46237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
46337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
46437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  template <class _StrictWeakOrdering>
46537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  void merge(_Self& __x, _StrictWeakOrdering __comp) {
46637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#if !defined (_STLP_NO_EXTENSIONS)
46737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_DEBUG_CHECK(_STLP_STD::is_sorted(_M_non_dbg_impl.begin(), _M_non_dbg_impl.end(), __comp))
46837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _STLP_DEBUG_CHECK(_STLP_STD::is_sorted(__x.begin()._M_iterator, __x.end()._M_iterator, __comp))
46937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#endif
47037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _M_non_dbg_impl.merge(__x._M_non_dbg_impl, __comp);
47137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    if (this->get_allocator() == __x.get_allocator()) {
47237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      __x._M_iter_list._Set_owner(_M_iter_list);
47337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    }
47437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    else {
47537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh      __x._Invalidate_iterators(__x.begin(), __x.end());
47637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    }
47737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
47837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
47937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  template <class _StrictWeakOrdering>
48037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  void sort(_StrictWeakOrdering __comp) {
48137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh    _M_non_dbg_impl.sort(__comp);
48237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh  }
48337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#endif
48437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh};
48537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
48637f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
48737f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh_STLP_END_NAMESPACE
48837f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
48937f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#undef _STLP_NON_DBG_LIST
49037f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
49137f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh#endif /* _STLP_INTERNAL_LIST_H */
49237f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh
49337f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh// Local Variables:
49437f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh// mode:C++
49537f12739251d2637c9405c75951962b5e27bbceeAndrew Hsieh// End:
496