177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner/*
277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1994
477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Hewlett-Packard Company
577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1996,1997
777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Silicon Graphics Computer Systems, Inc.
877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1997
1077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Moscow Center for SPARC Technology
1177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
1277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1999
1377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Boris Fomitchev
1477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
1577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * This material is provided "as is", with absolutely no warranty expressed
1677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * or implied. Any use is at your own risk.
1777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
1877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Permission to use or copy this software for any purpose is hereby granted
1977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * without fee, provided the above notices are retained on all copies.
2077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Permission to modify the code and to distribute modified code is granted,
2177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * provided the above notices are retained, and a notice that the code was
2277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * modified is included with the above copyright notice.
2377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
2477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */
2577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
2677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner/* NOTE: This is an internal header file, included by other STL headers.
2777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *   You should not attempt to use it directly.
2877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */
2977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
3077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_INTERNAL_DBG_DEQUE_H
3177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#define _STLP_INTERNAL_DBG_DEQUE_H
3277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
3377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_DBG_ITERATOR_H
3477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  include <stl/debug/_iterator.h>
3577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
3677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
3777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#define _STLP_NON_DBG_DEQUE _STLP_PRIV _STLP_NON_DBG_NAME(deque) <_Tp,_Alloc>
3877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
3977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_BEGIN_NAMESPACE
4077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
4177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_DEBUG_USE_DISTINCT_VALUE_TYPE_HELPERS)
4277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp, class _Alloc>
4377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _Tp* value_type(const _STLP_PRIV _DBG_iter_base< _STLP_NON_DBG_DEQUE >&)
4477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return (_Tp*)0; }
4577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp, class _Alloc>
4677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline random_access_iterator_tag iterator_category(const _STLP_PRIV _DBG_iter_base< _STLP_NON_DBG_DEQUE >&)
4777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return random_access_iterator_tag(); }
4877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
4977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
5077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp, _STLP_DFL_TMPL_PARAM(_Alloc, allocator<_Tp>) >
5177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerclass deque :
5277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (__DMC__)
5377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner             private
5477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
5577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                     _STLP_PRIV __construct_checker<_STLP_NON_DBG_DEQUE >
5677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND)
5777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner            , public __stlport_class<deque<_Tp, _Alloc> >
5877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
5977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{
6077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef deque<_Tp,_Alloc> _Self;
6177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef _STLP_NON_DBG_DEQUE _Base;
6277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef _STLP_PRIV __construct_checker<_STLP_NON_DBG_DEQUE > _ConstructCheck;
6377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
6477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic:
6577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Basic types
6677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  __IMPORT_CONTAINER_TYPEDEFS(_Base)
6777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
6877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Iterators
6977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef _STLP_PRIV _DBG_iter<_Base, _STLP_PRIV _DbgTraits<_Nonconst_traits<value_type> > > iterator;
7077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef _STLP_PRIV _DBG_iter<_Base, _STLP_PRIV _DbgTraits<_Const_traits<value_type> > >    const_iterator;
7177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
7277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DECLARE_RANDOM_ACCESS_REVERSE_ITERATORS;
7377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
7477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerprotected:
7577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Base _M_non_dbg_impl;
7677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_PRIV __owned_list _M_iter_list;
7777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
7877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void _Invalidate_all()
7977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { _M_iter_list._Invalidate_all(); }
8077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void _Invalidate_iterator(const iterator& __it)
8177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { _STLP_PRIV __invalidate_iterator(&_M_iter_list,__it); }
8277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void _Invalidate_iterators(const iterator& __first, const iterator& __last)
8377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { _STLP_PRIV __invalidate_range(&_M_iter_list, __first, __last); }
8477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
8577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic:
8677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Basic accessors
8777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  allocator_type get_allocator() const { return _M_non_dbg_impl.get_allocator(); }
8877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
8977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  iterator begin() { return iterator(&_M_iter_list, _M_non_dbg_impl.begin()); }
9077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  iterator end() { return iterator(&_M_iter_list, _M_non_dbg_impl.end()); }
9177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const_iterator begin() const { return const_iterator(&_M_iter_list, _M_non_dbg_impl.begin()); }
9277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const_iterator end() const { return const_iterator(&_M_iter_list, _M_non_dbg_impl.end()); }
9377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
9477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  reverse_iterator rbegin() { return reverse_iterator(end()); }
9577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  reverse_iterator rend() { return reverse_iterator(begin()); }
9677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); }
9777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const_reverse_iterator rend() const { return const_reverse_iterator(begin()); }
9877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
9977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  reference operator[](size_type __n) {
10077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_VERBOSE_ASSERT(__n < size(), _StlMsg_OUT_OF_BOUNDS)
10177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return _M_non_dbg_impl[__n];
10277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
10377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const_reference operator[](size_type __n) const {
10477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_VERBOSE_ASSERT(__n < size(), _StlMsg_OUT_OF_BOUNDS)
10577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return _M_non_dbg_impl[__n];
10677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
10777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
10877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  reference at(size_type __n) { return _M_non_dbg_impl.at(__n); }
10977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const_reference at(size_type __n) const { return _M_non_dbg_impl.at(__n); }
11077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
11177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  reference front() {
11277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_VERBOSE_ASSERT(!empty(), _StlMsg_EMPTY_CONTAINER)
11377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *begin();
11477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
11577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const_reference front() const {
11677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_VERBOSE_ASSERT(!empty(), _StlMsg_EMPTY_CONTAINER)
11777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *begin();
11877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
11977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  reference back() {
12077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_VERBOSE_ASSERT(!empty(), _StlMsg_EMPTY_CONTAINER)
12177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *(--end());
12277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
12377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const_reference back() const {
12477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_VERBOSE_ASSERT(!empty(), _StlMsg_EMPTY_CONTAINER)
12577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *(--end());
12677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
12777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
12877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Constructor, destructor.
12977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  explicit deque(const allocator_type& __a = allocator_type()) :
13077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl(__a), _M_iter_list(&_M_non_dbg_impl) {}
13177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  deque(const _Self& __x) :
13277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _ConstructCheck(__x), _M_non_dbg_impl(__x._M_non_dbg_impl),
13377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_iter_list(&_M_non_dbg_impl) {}
13477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
13577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined(_STLP_DONT_SUP_DFLT_PARAM)
13677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  explicit deque(size_type __n, const value_type& __x = _Tp(),
13777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#else
13877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  deque(size_type __n, const value_type& __x,
13977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif /*_STLP_DONT_SUP_DFLT_PARAM*/
14077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner            const allocator_type& __a = allocator_type()) :
14177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl(__n, __x, __a), _M_iter_list(&_M_non_dbg_impl) {}
14277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_DONT_SUP_DFLT_PARAM)
14377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  explicit deque(size_type __n) :
14477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl(__n), _M_iter_list(&_M_non_dbg_impl) {}
14577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif /*_STLP_DONT_SUP_DFLT_PARAM*/
14677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
14777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_NO_MOVE_SEMANTIC)
14877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  deque(__move_source<_Self> src)
14977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _M_non_dbg_impl(__move_source<_Base>(src.get()._M_non_dbg_impl)),
15077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      _M_iter_list(&_M_non_dbg_impl) {
15177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  if defined (_STLP_NO_EXTENSIONS) || (_STLP_DEBUG_LEVEL == _STLP_STANDARD_DBG_LEVEL)
15277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    src.get()._M_iter_list._Invalidate_all();
15377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  else
15477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    src.get()._M_iter_list._Set_owner(_M_iter_list);
15577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  endif
15677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
15777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
15877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
15977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_MEMBER_TEMPLATES)
16077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  template <class _InputIterator>
16177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  deque(_InputIterator __first, _InputIterator __last,
16277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner        const allocator_type& __a _STLP_ALLOCATOR_TYPE_DFL)
16377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _ConstructCheck(__first, __last),
16477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      _M_non_dbg_impl(_STLP_PRIV _Non_Dbg_iter(__first), _STLP_PRIV _Non_Dbg_iter(__last), __a),
16577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      _M_iter_list(&_M_non_dbg_impl) {
16677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    }
16777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  if defined (_STLP_NEEDS_EXTRA_TEMPLATE_CONSTRUCTORS)
16877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  template <class _InputIterator>
16977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  deque(_InputIterator __first, _InputIterator __last)
17077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _ConstructCheck(__first, __last),
17177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      _M_non_dbg_impl(_STLP_PRIV _Non_Dbg_iter(__first), _STLP_PRIV _Non_Dbg_iter(__last)),
17277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      _M_iter_list(&_M_non_dbg_impl) {
17377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    }
17477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  endif
17577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#else
17677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  deque(const value_type* __first, const value_type* __last,
17777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner        const allocator_type& __a = allocator_type())
17877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _ConstructCheck(__first, __last),
17977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      _M_non_dbg_impl(__first, __last, __a),
18077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      _M_iter_list(&_M_non_dbg_impl) {
18177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    }
18277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
18377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  deque(const_iterator __first, const_iterator __last,
18477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner        const allocator_type& __a = allocator_type())
18577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _ConstructCheck(__first, __last),
18677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      _M_non_dbg_impl(__first._M_iterator, __last._M_iterator, __a),
18777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      _M_iter_list(&_M_non_dbg_impl) {
18877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    }
18977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
19077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
19177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator=(const _Self& __x) {
19277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    if (this != &__x) {
19377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      _Invalidate_all();
19477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      _M_non_dbg_impl = __x._M_non_dbg_impl;
19577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    }
19677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
19777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
19877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
19977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  bool empty() const { return _M_non_dbg_impl.empty(); }
20077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type size() const { return _M_non_dbg_impl.size(); }
20177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type max_size() const { return _M_non_dbg_impl.max_size(); }
20277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
20377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void swap(_Self& __x) {
20477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_iter_list._Swap_owners(__x._M_iter_list);
20577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.swap(__x._M_non_dbg_impl);
20677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
20777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER)
20877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void _M_swap_workaround(_Self& __x) { swap(__x); }
20977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
21077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
21177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic:
21277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void assign(size_type __n, const _Tp& __val) {
21377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Invalidate_all();
21477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.assign(__n, __val);
21577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
21677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
21777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_MEMBER_TEMPLATES)
21877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  template <class _InputIterator>
21977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void assign(_InputIterator __first, _InputIterator __last) {
22077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
22177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Invalidate_all();
22277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.assign(_STLP_PRIV _Non_Dbg_iter(__first), _STLP_PRIV _Non_Dbg_iter(__last));
22377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
22477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#else
22577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void assign(const_iterator __first, const_iterator __last) {
22677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
22777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Invalidate_all();
22877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.assign(__first._M_iterator, __last._M_iterator);
22977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
23077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void assign(const value_type *__first, const value_type *__last) {
23177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_ptr_range(__first, __last))
23277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Invalidate_all();
23377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.assign(__first, __last);
23477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
23577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
23677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
23777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic:                         // push_* and pop_*
23877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
23977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_DONT_SUP_DFLT_PARAM) && !defined (_STLP_NO_ANACHRONISMS)
24077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void push_back(const value_type& __t = _Tp()) {
24177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#else
24277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void push_back(const value_type& __t) {
24377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
24477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Invalidate_all();
24577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.push_back(__t);
24677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
24777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
24877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_DONT_SUP_DFLT_PARAM) && !defined (_STLP_NO_ANACHRONISMS)
24977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void push_back() {
25077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Invalidate_all();
25177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.push_back();
25277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
25377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
25477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
25577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_DONT_SUP_DFLT_PARAM) && !defined (_STLP_NO_ANACHRONISMS)
25677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void push_front(const value_type& __t = _Tp()) {
25777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#else
25877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void push_front(const value_type& __t) {
25977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
26077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Invalidate_all();
26177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.push_front(__t);
26277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
26377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
26477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_DONT_SUP_DFLT_PARAM) && !defined (_STLP_NO_ANACHRONISMS)
26577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void push_front() {
26677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Invalidate_all();
26777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.push_front();
26877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
26977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
27077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
27177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void pop_back() {
27277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_VERBOSE_ASSERT(!empty(), _StlMsg_EMPTY_CONTAINER)
27377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Invalidate_iterator(end());
27477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.pop_back();
27577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
27677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
27777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void pop_front() {
27877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_VERBOSE_ASSERT(!empty(), _StlMsg_EMPTY_CONTAINER)
27977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Invalidate_iterator(begin());
28077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.pop_front();
28177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
28277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
28377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic:                         // Insert
28477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
28577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_DONT_SUP_DFLT_PARAM) && !defined (_STLP_NO_ANACHRONISMS)
28677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  iterator insert(iterator __pos, const value_type& __x = _Tp()) {
28777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#else
28877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  iterator insert(iterator __pos, const value_type& __x) {
28977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
29077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list, __pos))
29177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Invalidate_all();
29277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return iterator(&_M_iter_list, _M_non_dbg_impl.insert(__pos._M_iterator, __x));
29377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
29477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
29577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_DONT_SUP_DFLT_PARAM) && !defined (_STLP_NO_ANACHRONISMS)
29677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  iterator insert(iterator __pos) {
29777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list, __pos))
29877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Invalidate_all();
29977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return iterator(&_M_iter_list, _M_non_dbg_impl.insert(__pos._M_iterator));
30077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
30177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
30277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
30377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void insert(iterator __pos, size_type __n, const value_type& __x) {
30477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list, __pos))
30577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    if (__n != 0) _Invalidate_all();
30677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.insert(__pos._M_iterator, __n, __x);
30777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
30877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
30977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_MEMBER_TEMPLATES)
31077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  template <class _InputIterator>
31177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void insert(iterator __pos, _InputIterator __first, _InputIterator __last) {
31277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list, __pos))
31377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    // We perform invalidate first to detect self referencing in __check_range as __first and __last
31477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    // will have been invalidated.
31577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    if (__first != __last) _Invalidate_all();
31677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
31777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.insert(__pos._M_iterator,
31877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                           _STLP_PRIV _Non_Dbg_iter(__first), _STLP_PRIV _Non_Dbg_iter(__last));
31977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
32077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
32177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
32277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_MEMBER_TEMPLATES)
32377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void insert(iterator __pos,
32477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner              const value_type* __first, const value_type* __last) {
32577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list, __pos))
32677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_ptr_range(__first, __last))
32777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    if (__first != __last) _Invalidate_all();
32877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.insert(__pos._M_iterator, __first, __last);
32977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
33077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
33177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
33277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_MEMBER_TEMPLATES) || !defined (_STLP_NO_METHOD_SPECIALIZATION)
33377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void insert(iterator __pos,
33477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner              const_iterator __first, const_iterator __last) {
33577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list, __pos))
33677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
33777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    //Sequence requirements 23.1.1 Table 67:
33877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_not_owner(&_M_iter_list, __first));
33977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    if (__first != __last) _Invalidate_all();
34077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.insert(__pos._M_iterator, __first._M_iterator, __last._M_iterator);
34177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
34277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
34377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void insert(iterator __pos,
34477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner              iterator __first, iterator __last) {
34577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list, __pos))
34677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
34777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    //Sequence requirements 23.1.1 Table 67:
34877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_not_owner(&_M_iter_list, __first));
34977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    if (__first != __last) _Invalidate_all();
35077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.insert(__pos._M_iterator, __first._M_iterator, __last._M_iterator);
35177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
35277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
35377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
35477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_DONT_SUP_DFLT_PARAM)
35577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void resize(size_type __new_size, const value_type& __x = _Tp()) {
35677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#else
35777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void resize(size_type __new_size, const value_type& __x) {
35877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
35977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    if (__new_size != size()) {
36077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      if ((__new_size > size()) || (__new_size < size() - 1))
36177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner        _Invalidate_all();
36277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      else
36377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner        _Invalidate_iterator(end());
36477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    }
36577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.resize(__new_size, __x);
36677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
36777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
36877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_DONT_SUP_DFLT_PARAM)
36977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void resize(size_type new_size) { resize(new_size, _STLP_DEFAULT_CONSTRUCTED(_Tp)); }
37077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
37177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
37277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Erase
37377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  iterator erase(iterator __pos) {
37477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list, __pos))
37577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV _Dereferenceable(__pos))
37677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    if (__pos._M_iterator == _M_non_dbg_impl.begin()) {
37777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      _Invalidate_iterator(__pos);
37877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    } else {
37977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      typename _Base::iterator tmp = --(_M_non_dbg_impl.end());
38077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      if (__pos._M_iterator == tmp)
38177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner        _Invalidate_iterator(__pos);
38277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      else
38377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner        _Invalidate_all();
38477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    }
38577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return iterator (&_M_iter_list, _M_non_dbg_impl.erase(__pos._M_iterator));
38677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
38777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
38877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  iterator erase(iterator __first, iterator __last) {
38977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last, begin(), end()))
39077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    if (!empty()) {
39177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      if (__first._M_iterator == _M_non_dbg_impl.begin() ||
39277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner          __last._M_iterator == _M_non_dbg_impl.end())
39377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner        _Invalidate_iterators(__first, __last);
39477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      else
39577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner        _Invalidate_all();
39677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    }
39777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return iterator (&_M_iter_list, _M_non_dbg_impl.erase(__first._M_iterator, __last._M_iterator));
39877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
39977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
40077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void clear() {
40177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Invalidate_all();
40277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.clear();
40377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
40477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner};
40577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
40677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_END_NAMESPACE
40777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
40877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#undef _STLP_NON_DBG_DEQUE
40977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
41077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif /* _STLP_INTERNAL_DEQUE_H */
41177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
41277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Local Variables:
41377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// mode:C++
41477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// End:
415