19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/*
29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1997-1999
39720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Silicon Graphics Computer Systems, Inc.
49720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
59720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1999
69720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Boris Fomitchev
79720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
89720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * This material is provided "as is", with absolutely no warranty expressed
99720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * or implied. Any use is at your own risk.
109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to use or copy this software for any purpose is hereby granted
129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * without fee, provided the above notices are retained on all copies.
139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to modify the code and to distribute modified code is granted,
149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * provided the above notices are retained, and a notice that the code was
159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * modified is included with the above copyright notice.
169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_DBG_STRING_H
199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_DBG_STRING_H
209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_DBG_ITERATOR_H
229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  include <stl/debug/_iterator.h>
239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE
269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_NON_DBG_STRING_NAME _STLP_NON_DBG_NAME(str)
289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_NON_DBG_STRING _STLP_PRIV _STLP_NON_DBG_STRING_NAME <_CharT, _Traits, _Alloc>
299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_DEBUG_USE_DISTINCT_VALUE_TYPE_HELPERS)
319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT,class _Traits, class _Alloc>
329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _CharT*
339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvalue_type(const _STLP_PRIV _DBG_iter_base< _STLP_NON_DBG_STRING >&)
349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return (_CharT*)0; }
359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits, class _Alloc>
369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline random_access_iterator_tag
379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockiterator_category(const _STLP_PRIV _DBG_iter_base< _STLP_NON_DBG_STRING >&)
389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return random_access_iterator_tag(); }
399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits, class _Alloc>
429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass basic_string :
439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (__DMC__)
449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                     private
459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                     public
479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                             _STLP_PRIV __construct_checker<_STLP_NON_DBG_STRING >
499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (basic_string)
509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                   , public __stlport_class<basic_string<_CharT, _Traits, _Alloc> >
519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{
539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected:
549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _STLP_NON_DBG_STRING _Base;
559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef basic_string<_CharT, _Traits, _Alloc> _Self;
569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _STLP_PRIV __construct_checker<_STLP_NON_DBG_STRING > _ConstructCheck;
579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _IsPOD<_CharT>::_Type _Char_Is_POD;
589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  __IMPORT_CONTAINER_TYPEDEFS(_Base)
619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Base::traits_type traits_type;
629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _STLP_PRIV _DBG_iter<_Base, _STLP_PRIV _DbgTraits<_Nonconst_traits<value_type> > > iterator;
639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef _STLP_PRIV _DBG_iter<_Base, _STLP_PRIV _DbgTraits<_Const_traits<value_type> > > const_iterator;
649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_DECLARE_RANDOM_ACCESS_REVERSE_ITERATORS;
659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:                         // Constructor, destructor, assignment.
679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  typedef typename _Base::_Reserve_t _Reserve_t;
689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Base _M_non_dbg_impl;
719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_PRIV __owned_list _M_iter_list;
729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void _Invalidate_all()
749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { _M_iter_list._Invalidate_all(); }
759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void _Compare_Capacity (size_type __old_capacity) {
769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    if (this->capacity() > __old_capacity) {
779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _Invalidate_all();
789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    }
799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void _Invalidate_iterator(const iterator& __it)
819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { _STLP_PRIV __invalidate_iterator(&_M_iter_list, __it); }
829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void _Invalidate_iterators(const iterator& __f, const iterator& __l)
839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { _STLP_PRIV __invalidate_range(&_M_iter_list, __f, __l); }
849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include <stl/_string_npos.h>
879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  allocator_type get_allocator() const { return _M_non_dbg_impl.get_allocator(); }
899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  explicit basic_string(const allocator_type& __a = allocator_type())
919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : _M_non_dbg_impl(__a), _M_iter_list(&_M_non_dbg_impl) {}
929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  basic_string(_Reserve_t __r, size_t __n,
949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block               const allocator_type& __a = allocator_type())
959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : _M_non_dbg_impl(__r, __n, __a), _M_iter_list(&_M_non_dbg_impl) {}
969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  basic_string(const _Self& __s)
989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : _ConstructCheck(__s),
999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _M_non_dbg_impl(__s._M_non_dbg_impl), _M_iter_list(&_M_non_dbg_impl) {}
1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  basic_string(const _Self& __s, size_type __pos, size_type __n = npos,
1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block               const allocator_type& __a = allocator_type())
1039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : _M_non_dbg_impl(__s._M_non_dbg_impl, __pos, __n, __a),
1049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _M_iter_list(&_M_non_dbg_impl) {}
1059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  basic_string(const _CharT* __s, size_type __n,
1079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block               const allocator_type& __a = allocator_type())
1089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : _ConstructCheck(__s), _M_non_dbg_impl(__s, __n, __a),
1099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _M_iter_list(&_M_non_dbg_impl) {}
1109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  basic_string(const _CharT* __s,
1129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block               const allocator_type& __a = allocator_type())
1139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : _ConstructCheck(__s),
1149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _M_non_dbg_impl(__s, __a), _M_iter_list(&_M_non_dbg_impl) {}
1159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  basic_string(size_type __n, _CharT __c,
1179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block               const allocator_type& __a = allocator_type())
1189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : _M_non_dbg_impl(__n, __c, __a), _M_iter_list(&_M_non_dbg_impl) {}
1199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
120e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_MOVE_SEMANTIC)
1219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  basic_string(__move_source<_Self> src)
1229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : _M_non_dbg_impl(__move_source<_Base >(src.get()._M_non_dbg_impl)),
1239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _M_iter_list(&_M_non_dbg_impl) {
124e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if defined (_STLP_NO_EXTENSIONS) || (_STLP_DEBUG_LEVEL == _STLP_STANDARD_DBG_LEVEL)
1259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    src.get()._M_iter_list._Invalidate_all();
126e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  else
1279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    src.get()._M_iter_list._Set_owner(_M_iter_list);
128e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
1299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
130e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
1319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
132e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_MEMBER_TEMPLATES)
1339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  basic_string(const _CharT* __f, const _CharT* __l,
1349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block               const allocator_type& __a = allocator_type())
1359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : _ConstructCheck(__f, __l),
1369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _M_non_dbg_impl(__f, __l, __a), _M_iter_list(&_M_non_dbg_impl) {
1379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
1389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  basic_string(const_iterator __f, const_iterator __l,
1399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block               const allocator_type & __a = allocator_type())
1409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : _ConstructCheck(__f, __l),
1419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _M_non_dbg_impl(__f._M_iterator, __l._M_iterator, __a), _M_iter_list(&_M_non_dbg_impl) {
1429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
1439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else
1449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _InputIterator>
1459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  basic_string(_InputIterator __f, _InputIterator __l,
1469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block               const allocator_type & __a _STLP_ALLOCATOR_TYPE_DFL)
1479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : _ConstructCheck(__f, __l),
1489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _M_non_dbg_impl(_STLP_PRIV _Non_Dbg_iter(__f), _STLP_PRIV _Non_Dbg_iter(__l), __a),
1499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _M_iter_list(&_M_non_dbg_impl) {}
1509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_STLP_NEEDS_EXTRA_TEMPLATE_CONSTRUCTORS)
1519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _InputIterator>
1529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  basic_string(_InputIterator __f, _InputIterator __l)
1539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : _ConstructCheck(__f, __l),
1549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _M_non_dbg_impl(_STLP_PRIV _Non_Dbg_iter(__f), _STLP_PRIV _Non_Dbg_iter(__l)),
1559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _M_iter_list(&_M_non_dbg_impl) {}
1569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
1579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
1589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate:
1609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // constructor from non-debug version for substr
1619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  basic_string (const _Base& __x)
1629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    : _M_non_dbg_impl(__x), _M_iter_list(&_M_non_dbg_impl) {}
1639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic:
1659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& operator=(const _Self& __s) {
1669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    if (this != &__s) {
1679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      assign(__s);
1689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    }
1699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
1709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
1719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& operator=(const _CharT* __s) {
1739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_FIX_LITERAL_BUG(__s)
1749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
1759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return assign(__s);
1769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
1779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& operator=(_CharT __c) {
1799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return assign(1, __c);
1809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
1819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Iterators.
1839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  iterator begin() { return iterator(&_M_iter_list, _M_non_dbg_impl.begin()); }
1849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const_iterator begin() const { return const_iterator(&_M_iter_list, _M_non_dbg_impl.begin()); }
1859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  iterator end() { return iterator(&_M_iter_list, _M_non_dbg_impl.end()); }
1869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const_iterator end() const { return const_iterator(&_M_iter_list, _M_non_dbg_impl.end()); }
1879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  reverse_iterator rbegin()             { return reverse_iterator(end()); }
1899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); }
1909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  reverse_iterator rend()               { return reverse_iterator(begin()); }
1919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const_reverse_iterator rend() const   { return const_reverse_iterator(begin()); }
1929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Size, capacity, etc.
1949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type size() const { return _M_non_dbg_impl.size(); }
1959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type length() const { return _M_non_dbg_impl.length(); }
1969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_t max_size() const { return _M_non_dbg_impl.max_size(); }
1979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void resize(size_type __n, _CharT __c) {
1999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    if (__n > capacity())
2009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _Invalidate_all();
2019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    else if (__n < size())
2029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _Invalidate_iterators(begin() + __n, end());
2039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.resize(__n, __c);
2049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void resize(size_type __n) { resize(__n, _STLP_DEFAULT_CONSTRUCTED(_CharT)); }
2069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type capacity() const { return _M_non_dbg_impl.capacity(); }
2079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void reserve(size_type __s = 0) {
2099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    if (__s > capacity()) _Invalidate_all();
2109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.reserve(__s);
2119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void clear() {
2149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Invalidate_all();
2159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.clear();
2169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  bool empty() const { return _M_non_dbg_impl.empty(); }
2199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const_reference operator[](size_type __n) const {
2219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_VERBOSE_ASSERT(__n <= this->size(), _StlMsg_OUT_OF_BOUNDS);
2229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return _M_non_dbg_impl[__n];
2239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  reference operator[](size_type __n) {
2269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_VERBOSE_ASSERT(__n < this->size(), _StlMsg_OUT_OF_BOUNDS)
2279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return _M_non_dbg_impl[__n];
2289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const_reference at(size_type __n) const { return _M_non_dbg_impl.at(__n); }
2319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  reference at(size_type __n) { return _M_non_dbg_impl.at(__n); }
2329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Append, operator+=, push_back.
2349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& operator+=(const _Self& __s) { return append(__s); }
2359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& operator+=(const _CharT* __s) {
2369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_FIX_LITERAL_BUG(__s)
2379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
2389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return append(__s);
2399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& operator+=(_CharT __c) { return append(1, __c); }
2419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_MEMBER_TEMPLATES)
2439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _InputIter>
2449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& append(_InputIter __first, _InputIter __last) {
2459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
2469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    size_type __old_capacity = capacity();
2479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.append(_STLP_PRIV _Non_Dbg_iter(__first), _STLP_PRIV _Non_Dbg_iter(__last));
2489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Compare_Capacity(__old_capacity);
2499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
2509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
2529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_MEMBER_TEMPLATES) || \
2549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    !defined (_STLP_NO_METHOD_SPECIALIZATION) && !defined (_STLP_NO_EXTENSIONS)
2559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& append(const _CharT* __f, const _CharT* __l) {
2569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_FIX_LITERAL_BUG(__f) _STLP_FIX_LITERAL_BUG(__l)
2579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_DEBUG_CHECK(_STLP_PRIV __check_ptr_range(__f, __l))
2589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    size_type __old_capacity = capacity();
2599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.append(__f, __l);
2609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Compare_Capacity(__old_capacity);
2619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
2629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& append(const_iterator __f, const_iterator __l) {
2659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__f, __l))
2669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    size_type __old_capacity = capacity();
2679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.append(__f._M_iterator, __l._M_iterator);
2689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Compare_Capacity(__old_capacity);
2699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
2709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
2729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& append(const _Self& __s) {
2749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    size_type __old_capacity = capacity();
2759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.append(__s._M_non_dbg_impl);
2769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Compare_Capacity(__old_capacity);
2779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
2789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& append(const _Self& __s, size_type __pos, size_type __n) {
2819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    size_type __old_capacity = capacity();
2829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.append(__s._M_non_dbg_impl, __pos, __n);
2839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Compare_Capacity(__old_capacity);
2849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
2859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& append(const _CharT* __s, size_type __n) {
2889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_FIX_LITERAL_BUG(__s)
2899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
2909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    size_type __old_capacity = capacity();
2919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.append(__s, __n);
2929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Compare_Capacity(__old_capacity);
2939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
2949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
2959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
2969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& append(const _CharT* __s) {
2979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_FIX_LITERAL_BUG(__s)
2989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
2999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    size_type __old_capacity = capacity();
3009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.append(__s);
3019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Compare_Capacity(__old_capacity);
3029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
3039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
3049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& append(size_type __n, _CharT __c) {
3069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    size_type __old_capacity = this->capacity();
3079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.append(__n, __c);
3089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Compare_Capacity(__old_capacity);
3099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
3109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
3119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void push_back(_CharT __c) {
3139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    size_type __old_capacity = this->capacity();
3149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.push_back(__c);
3159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Compare_Capacity(__old_capacity);
3169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
3179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void pop_back() {
3199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Invalidate_iterator(this->end());
3209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.pop_back();
3219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
3229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Assign
3249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& assign(const _Self& __s) {
325e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Invalidate_all();
3269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.assign(__s._M_non_dbg_impl);
3279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
3289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
3299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& assign(const _Self& __s, size_type __pos, size_type __n) {
3319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    if (__pos < __s.size()) {
332e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott      _Invalidate_all();
3339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    }
3349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.assign(__s._M_non_dbg_impl, __pos, __n);
3359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
3369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
3379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& assign(const _CharT* __s, size_type __n) {
3399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_FIX_LITERAL_BUG(__s)
3409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
341e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Invalidate_all();
3429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.assign(__s, __s + __n);
3439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
3449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
3459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& assign(const _CharT* __s) {
3479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_FIX_LITERAL_BUG(__s)
3489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
349e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Invalidate_all();
3509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.assign(__s);
3519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
3529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
3539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& assign(size_type __n, _CharT __c) {
355e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Invalidate_all();
3569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.assign(__n, __c);
3579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
3589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
3599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined(_STLP_MEMBER_TEMPLATES)
3619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _InputIter>
3629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  inline _Self& assign(_InputIter __first, _InputIter __last) {
3639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_FIX_LITERAL_BUG(__first) _STLP_FIX_LITERAL_BUG(__last)
3649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
365e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Invalidate_all();
366e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _M_non_dbg_impl.assign(_STLP_PRIV _Non_Dbg_iter(__first), _STLP_PRIV _Non_Dbg_iter(__last));
3679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
3689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
3699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
3709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_MEMBER_TEMPLATES) || \
3729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    !defined (_STLP_NO_METHOD_SPECIALIZATION) && !defined (_STLP_NO_EXTENSIONS)
3739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& assign(const _CharT* __f, const _CharT* __l) {
3749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_FIX_LITERAL_BUG(__f) _STLP_FIX_LITERAL_BUG(__l)
3759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_DEBUG_CHECK(_STLP_PRIV __check_ptr_range(__f, __l))
376e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Invalidate_all();
3779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.assign(__f, __l);
3789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
3799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
3809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& assign(const_iterator __f, const_iterator __l) {
3819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__f, __l))
382e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Invalidate_all();
3839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.assign(__f._M_iterator, __l._M_iterator);
3849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
3859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
3869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
3879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Insert
3899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& insert(size_type __pos, const _Self& __s) {
3909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    size_type __old_capacity = capacity();
3919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.insert(__pos, __s._M_non_dbg_impl);
3929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Compare_Capacity(__old_capacity);
3939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
3949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
3959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
3969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& insert(size_type __pos, const _Self& __s,
3979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                size_type __beg, size_type __n) {
3989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    size_type __old_capacity = capacity();
3999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.insert(__pos, __s._M_non_dbg_impl, __beg, __n);
4009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Compare_Capacity(__old_capacity);
4019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
4029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
4039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& insert(size_type __pos, const _CharT* __s, size_type __n) {
4059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_FIX_LITERAL_BUG(__s)
4069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
4079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    size_type __old_capacity = capacity();
4089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.insert(__pos, __s, __n);
4099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Compare_Capacity(__old_capacity);
4109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
4119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
4129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& insert(size_type __pos, const _CharT* __s) {
4149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_FIX_LITERAL_BUG(__s)
4159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
4169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return insert(__pos, __s, _Traits::length(__s));
4179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
4189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& insert(size_type __pos, size_type __n, _CharT __c) {
4209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    size_type __old_capacity = capacity();
4219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.insert(__pos, __n, __c);
4229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Compare_Capacity(__old_capacity);
4239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
4249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
4259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  iterator insert(iterator __p, _CharT __c) {
4279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__p))
4289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    size_type __old_capacity = capacity();
4299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    typename _Base::iterator __ret = _M_non_dbg_impl.insert(__p._M_iterator, __c);
4309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Compare_Capacity(__old_capacity);
4319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return iterator(&_M_iter_list, __ret);
4329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
4339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void insert(iterator __p, size_t __n, _CharT __c) {
4359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__p))
4369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    size_type __old_capacity = capacity();
4379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.insert(__p._M_iterator, __n, __c);
4389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Compare_Capacity(__old_capacity);
4399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
4409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_MEMBER_TEMPLATES)
4429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _InputIter>
4439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void insert(iterator __p, _InputIter __first, _InputIter __last) {
4449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__p))
4459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first,__last))
4469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    size_type __old_capacity = this->capacity();
448e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _M_non_dbg_impl.insert(__p._M_iterator,
449e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                           _STLP_PRIV _Non_Dbg_iter(__first), _STLP_PRIV _Non_Dbg_iter(__last));
4509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Compare_Capacity(__old_capacity);
4519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
4529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
4539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
454e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_MEMBER_TEMPLATES)
455e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  void insert(iterator __p, const _CharT* __f, const _CharT* __l) {
456e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _STLP_FIX_LITERAL_BUG(__f)_STLP_FIX_LITERAL_BUG(__l)
457e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__p))
458e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _STLP_DEBUG_CHECK(_STLP_PRIV __check_ptr_range(__f,__l))
459e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    size_type __old_capacity = capacity();
460e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _M_non_dbg_impl.insert(__p._M_iterator, __f, __l);
461e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Compare_Capacity(__old_capacity);
462e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
463e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
464e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott
465e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_MEMBER_TEMPLATES) || !defined (_STLP_NO_METHOD_SPECIALIZATION)
466e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  // Those overloads are necessary to check self referencing correctly in non debug
467e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  // basic_string implementation
4689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void insert(iterator __p, const_iterator __f, const_iterator __l) {
4699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__p))
4709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__f,__l))
471e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if (_STLP_DEBUG_LEVEL == _STLP_STANDARD_DBG_LEVEL)
472e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _STLP_STD_DEBUG_CHECK(__check_if_not_owner(&_M_iter_list, __f))
473e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
4749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    size_type __old_capacity = capacity();
4759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.insert(__p._M_iterator, __f._M_iterator, __l._M_iterator);
4769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Compare_Capacity(__old_capacity);
4779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
478e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  void insert(iterator __p, iterator __f, iterator __l) {
4799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__p))
480e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__f,__l))
481e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  if (_STLP_DEBUG_LEVEL == _STLP_STANDARD_DBG_LEVEL)
482e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _STLP_STD_DEBUG_CHECK(__check_if_not_owner(&_M_iter_list, __f))
483e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#  endif
4849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    size_type __old_capacity = capacity();
485e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _M_non_dbg_impl.insert(__p._M_iterator, __f._M_iterator, __l._M_iterator);
4869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Compare_Capacity(__old_capacity);
4879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
4889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
4899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
4909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Erase.
4919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& erase(size_type __pos = 0, size_type __n = npos) {
4929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    if (__pos < size()) {
4939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _Invalidate_iterators(begin() + __pos, end());
4949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    }
4959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.erase(__pos, __n);
4969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
4979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
4989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  iterator erase(iterator __pos) {
4999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_DEBUG_CHECK(_STLP_PRIV _Dereferenceable(__pos))
5009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__pos))
5019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Invalidate_iterators(__pos, end());
5029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return iterator(&_M_iter_list, _M_non_dbg_impl.erase(__pos._M_iterator));
5039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
5049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  iterator erase(iterator __f, iterator __l) {
5059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__f, __l, begin(), end()))
5069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Invalidate_iterators(__f, end());
5079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return iterator(&_M_iter_list, _M_non_dbg_impl.erase(__f._M_iterator, __l._M_iterator));
5089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
5099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Substring.
5119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self substr(size_type __pos = 0, size_type __n = npos) const
5129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _M_non_dbg_impl.substr(__pos, __n); }
5139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Replace.  (Conceptually equivalent to erase followed by insert.)
5159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& replace(size_type __pos, size_type __n, const _Self& __s) {
5169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    size_type __old_capacity = capacity();
5179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.replace(__pos, __n, __s._M_non_dbg_impl);
5189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Compare_Capacity(__old_capacity);
5199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
5209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
5219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& replace(size_type __pos1, size_type __n1, const _Self& __s,
5239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                 size_type __pos2, size_type __n2) {
5249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    size_type __old_capacity = capacity();
5259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.replace(__pos1, __n1, __s._M_non_dbg_impl, __pos2, __n2);
5269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Compare_Capacity(__old_capacity);
5279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
5289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
5299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& replace(size_type __pos, size_type __n1, const _CharT* __s, size_type __n2) {
5319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_FIX_LITERAL_BUG(__s)
5329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
5339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    size_type __old_capacity = capacity();
5349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.replace(__pos, __n1, __s, __n2);
5359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Compare_Capacity(__old_capacity);
5369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
5379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
5389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& replace(size_type __pos, size_type __n1, const _CharT* __s) {
5409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_FIX_LITERAL_BUG(__s)
5419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
5429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    size_type __old_capacity = capacity();
5439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.replace(__pos, __n1, __s);
5449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Compare_Capacity(__old_capacity);
5459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
5469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
5479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& replace(size_type __pos, size_type __n1, size_type __n2, _CharT __c) {
5499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    size_type __old_capacity = capacity();
5509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.replace(__pos, __n1, __n2, __c);
5519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Compare_Capacity(__old_capacity);
5529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
5539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
5549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& replace(iterator __f, iterator __l, const _Self& __s) {
5569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__f, __l, begin(), end()))
5579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    size_type __old_capacity = capacity();
5589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.replace(__f._M_iterator, __l._M_iterator, __s._M_non_dbg_impl);
5599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Compare_Capacity(__old_capacity);
5609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
5619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
5629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& replace(iterator __f, iterator __l, const _CharT* __s, size_type __n) {
5649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_FIX_LITERAL_BUG(__s)
5659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__f, __l, begin(), end()))
5669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
5679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    size_type __old_capacity = capacity();
5689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.replace(__f._M_iterator, __l._M_iterator, __s, __n);
5699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Compare_Capacity(__old_capacity);
5709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
5719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
5729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& replace(iterator __f, iterator __l, const _CharT* __s) {
5749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_FIX_LITERAL_BUG(__s)
5759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__f, __l, begin(), end()))
5769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
5779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    size_type __old_capacity = capacity();
5789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.replace(__f._M_iterator, __l._M_iterator, __s);
5799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Compare_Capacity(__old_capacity);
5809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
5819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
5829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& replace(iterator __f, iterator __l, size_type __n, _CharT __c) {
5849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__f, __l, begin(), end()))
5859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    size_type __old_capacity = capacity();
5869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.replace(__f._M_iterator, __l._M_iterator, __n, __c);
5879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Compare_Capacity(__old_capacity);
5889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
5899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
5909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
5919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_MEMBER_TEMPLATES)
5929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  template <class _InputIter>
5939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& replace(iterator __first, iterator __last,
5949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                 _InputIter __f, _InputIter __l) {
5959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last, begin(), end()))
5969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__f, __l))
5979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
598e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    size_type __old_capacity = capacity();
599e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _M_non_dbg_impl.replace(__first._M_iterator, __last._M_iterator,
600e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                            _STLP_PRIV _Non_Dbg_iter(__f), _STLP_PRIV _Non_Dbg_iter(__l));
601e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _Compare_Capacity(__old_capacity);
602e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    return *this;
603e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  }
604e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
6059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
606e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_MEMBER_TEMPLATES)
607e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _Self& replace(iterator __first, iterator __last,
608e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                 const _CharT* __f, const _CharT* __l) {
609e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _STLP_FIX_LITERAL_BUG(__f)_STLP_FIX_LITERAL_BUG(__l)
610e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last, begin(), end()))
611e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _STLP_DEBUG_CHECK(_STLP_PRIV __check_ptr_range(__f, __l))
6129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    size_type __old_capacity = capacity();
613e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _M_non_dbg_impl.replace(__first._M_iterator, __last._M_iterator, __f, __l);
6149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Compare_Capacity(__old_capacity);
6159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
6169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
6179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
6189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
619e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_MEMBER_TEMPLATES) || !defined (_STLP_NO_METHOD_SPECIALIZATION)
6209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& replace(iterator __first, iterator __last,
6219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                 const_iterator __f, const_iterator __l) {
6229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last, begin(), end()))
6239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__f, __l))
6249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    size_type __old_capacity = capacity();
6259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.replace(__first._M_iterator, __last._M_iterator,
6269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                            __f._M_iterator, __l._M_iterator);
6279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Compare_Capacity(__old_capacity);
6289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
6299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
6309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _Self& replace(iterator __first, iterator __last,
631e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                 iterator __f, iterator __l) {
6329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last, begin(), end()))
633e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__f, __l))
6349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    size_type __old_capacity = capacity();
635e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _M_non_dbg_impl.replace(__first._M_iterator, __last._M_iterator,
636e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott                            __f._M_iterator, __l._M_iterator);
6379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _Compare_Capacity(__old_capacity);
6389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return *this;
6399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
6409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
6419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Other modifier member functions.
6439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  void swap(_Self& __s) {
6449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_iter_list._Swap_owners(__s._M_iter_list);
6459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_non_dbg_impl.swap(__s._M_non_dbg_impl);
6469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
647e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER)
648e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  void _M_swap_workaround(_Self& __x) { swap(__x); }
649e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
6509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  int compare(const _Self& __s) const
6529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _M_non_dbg_impl.compare(__s._M_non_dbg_impl); }
6539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  int compare(size_type __pos, size_type __n, const _Self& __s) const
6549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _M_non_dbg_impl.compare(__pos, __n, __s._M_non_dbg_impl); }
6559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  int compare(size_type __pos1, size_type __n1, const _Self& __s,
6569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block              size_type __pos2, size_type __n2) const
6579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _M_non_dbg_impl.compare(__pos1, __n1, __s._M_non_dbg_impl, __pos2, __n2); }
6589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  int compare(const _CharT* __s) const {
6599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_FIX_LITERAL_BUG(__s)
6609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return _M_non_dbg_impl.compare(__s);
6619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
6629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  int compare(size_type __pos, size_type __n, const _CharT* __s) const {
6639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_FIX_LITERAL_BUG(__s)
6649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return _M_non_dbg_impl.compare(__pos, __n, __s);
6659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
6669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  int compare(size_type __pos1, size_type __n1, const _CharT* __s,
6679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block              size_type __n2) const {
6689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_FIX_LITERAL_BUG(__s)
6699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return _M_non_dbg_impl.compare(__pos1, __n1, __s, __n2);
6709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
6719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // Helper functions for compare.
6739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static int _STLP_CALL _M_compare(const _CharT* __f1, const _CharT* __l1,
6749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                   const _CharT* __f2, const _CharT* __l2)
6759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _Base::_M_compare(__f1, __l1, __f2, __l2); }
6769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static int _STLP_CALL _M_compare(const_iterator __f1, const_iterator __l1,
6779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                   const _CharT* __f2, const _CharT* __l2)
6789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _Base::_M_compare(__f1._M_iterator, __l1._M_iterator, __f2, __l2); }
6799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static int _STLP_CALL _M_compare(const _CharT* __f1, const _CharT* __l1,
6809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                   const_iterator __f2, const_iterator __l2)
6819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _Base::_M_compare(__f1, __l1, __f2._M_iterator, __l2._M_iterator); }
6829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  static int _STLP_CALL _M_compare(const_iterator __f1, const_iterator __l1,
6839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block                                   const_iterator __f2, const_iterator __l2)
6849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _Base::_M_compare(__f1._M_iterator, __l1._M_iterator, __f2._M_iterator, __l2._M_iterator); }
6859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const _CharT* c_str() const { return _M_non_dbg_impl.c_str(); }
6879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  const _CharT* data()  const { return _M_non_dbg_impl.data(); }
6889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type copy(_CharT* __s, size_type __n, size_type __pos = 0) const
6909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _M_non_dbg_impl.copy(__s, __n, __pos); }
6919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
6929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // find.
6939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type find(const _Self& __s, size_type __pos = 0) const
6949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _M_non_dbg_impl.find(__s._M_non_dbg_impl, __pos); }
6959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type find(const _CharT* __s, size_type __pos = 0) const {
6969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_FIX_LITERAL_BUG(__s)
6979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
6989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return _M_non_dbg_impl.find(__s, __pos);
6999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
7009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type find(const _CharT* __s, size_type __pos, size_type __n) const {
7019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_FIX_LITERAL_BUG(__s)
7029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
7039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return _M_non_dbg_impl.find(__s, __pos, __n);
7049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
7059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // WIE: Versant schema compiler 5.2.2 ICE workaround
7069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type find(_CharT __c) const { return find(__c, 0); }
7079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type find(_CharT __c, size_type __pos /* = 0 */) const
7089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _M_non_dbg_impl.find(__c, __pos); }
7099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // rfind.
7119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type rfind(const _Self& __s, size_type __pos = npos) const
7129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _M_non_dbg_impl.rfind(__s._M_non_dbg_impl, __pos); }
7139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type rfind(const _CharT* __s, size_type __pos = npos) const {
7149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_FIX_LITERAL_BUG(__s)
7159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
7169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return _M_non_dbg_impl.rfind(__s, __pos);
7179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
7189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type rfind(const _CharT* __s, size_type __pos, size_type __n) const {
7199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_FIX_LITERAL_BUG(__s)
7209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
7219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return _M_non_dbg_impl.rfind(__s, __pos, __n);
7229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
7239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type rfind(_CharT __c, size_type __pos = npos) const
7249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _M_non_dbg_impl.rfind(__c, __pos); }
7259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // find_first_of
7279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type find_first_of(const _Self& __s, size_type __pos = 0) const
7289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _M_non_dbg_impl.find_first_of(__s._M_non_dbg_impl, __pos); }
7299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type find_first_of(const _CharT* __s, size_type __pos = 0) const {
7309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_FIX_LITERAL_BUG(__s)
7319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
7329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return _M_non_dbg_impl.find_first_of(__s, __pos);
7339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
7349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type find_first_of(const _CharT* __s, size_type __pos, size_type __n) const {
7359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_FIX_LITERAL_BUG(__s)
7369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
7379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return _M_non_dbg_impl.find_first_of(__s, __pos, __n);
7389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
7399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type find_first_of(_CharT __c, size_type __pos = 0) const
7409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _M_non_dbg_impl.find_first_of(__c, __pos); }
7419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // find_last_of
7439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type find_last_of(const _Self& __s, size_type __pos = npos) const
7449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _M_non_dbg_impl.find_last_of(__s._M_non_dbg_impl, __pos); }
7459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type find_last_of(const _CharT* __s, size_type __pos = npos) const {
7469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_FIX_LITERAL_BUG(__s)
7479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
7489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return _M_non_dbg_impl.find_last_of(__s, __pos);
7499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
7509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type find_last_of(const _CharT* __s, size_type __pos, size_type __n) const {
7519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_FIX_LITERAL_BUG(__s)
7529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
7539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return _M_non_dbg_impl.find_last_of(__s, __pos, __n);
7549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
7559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type find_last_of(_CharT __c, size_type __pos = npos) const
7569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _M_non_dbg_impl.rfind(__c, __pos); }
7579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // find_first_not_of
7599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type find_first_not_of(const _Self& __s, size_type __pos = 0) const
7609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _M_non_dbg_impl.find_first_not_of(__s._M_non_dbg_impl, __pos); }
7619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type find_first_not_of(const _CharT* __s, size_type __pos = 0) const {
7629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_FIX_LITERAL_BUG(__s)
7639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
7649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return _M_non_dbg_impl.find_first_not_of(__s, __pos);
7659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
7669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type find_first_not_of(const _CharT* __s, size_type __pos, size_type __n) const {
7679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_FIX_LITERAL_BUG(__s)
7689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
7699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return _M_non_dbg_impl.find_first_not_of(__s, __pos, __n);
7709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
7719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type find_first_not_of(_CharT __c, size_type __pos = 0) const
7729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _M_non_dbg_impl.find_first_not_of(__c, __pos); }
7739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // find_last_not_of
7759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type find_last_not_of(const _Self& __s, size_type __pos = npos) const
7769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _M_non_dbg_impl.find_last_not_of(__s._M_non_dbg_impl, __pos); }
7779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type find_last_not_of(const _CharT* __s, size_type __pos = npos) const {
7789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_FIX_LITERAL_BUG(__s)
7799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
7809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return _M_non_dbg_impl.find_last_not_of(__s, __pos);
7819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
7829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type find_last_not_of(const _CharT* __s, size_type __pos, size_type __n) const {
7839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_FIX_LITERAL_BUG(__s)
7849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
7859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    return _M_non_dbg_impl.find_last_not_of(__s, __pos, __n);
7869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
7879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  size_type find_last_not_of(_CharT __c, size_type __pos = npos) const
7889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  { return _M_non_dbg_impl.find_last_not_of(__c, __pos); }
7899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_TEMPLATE_EXPRESSION)
7919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  include <stl/debug/_string_sum_methods.h>
792e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
7939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block};
7949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
7959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// This is a hook to instantiate STLport exports in a designated DLL
7969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_TEMPLATE_EXPORT) && !defined (_STLP_USE_MSVC6_MEM_T_BUG_WORKAROUND)
7979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE
7989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE_CLASS __construct_checker<_STLP_NON_DBG_STRING_NAME <char, char_traits<char>, allocator<char> > >;
7999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE
8009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE_CLASS basic_string<char, char_traits<char>, allocator<char> >;
8019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  if defined (_STLP_HAS_WCHAR_T)
8029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE
8039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE_CLASS __construct_checker<_STLP_NON_DBG_STRING_NAME <wchar_t, char_traits<wchar_t>, allocator<wchar_t> > >;
8049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE
8059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE_CLASS basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> >;
8069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#  endif
807e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif
8089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
8099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#undef _STLP_NON_DBG_STRING
8109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#undef _STLP_NON_DBG_STRING_NAME
8119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
812e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (__GNUC__) && (__GNUC__ == 2) && (__GNUC_MINOR__ == 96)
8139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits, class _Alloc>
8149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockconst size_t basic_string<_CharT, _Traits, _Alloc>::npos = ~(size_t) 0;
8159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
8169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
8179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (basic_string)
8189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE
8199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#undef basic_string
8209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
8219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
8229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE
8239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
8249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_DBG_STRING */
8259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
8269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Local Variables:
8279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// mode:C++
8289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// End:
829