177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner/*
277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1997-1999
377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Silicon Graphics Computer Systems, Inc.
477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1999
677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Boris Fomitchev
777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * This material is provided "as is", with absolutely no warranty expressed
977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * or implied. Any use is at your own risk.
1077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
1177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Permission to use or copy this software for any purpose is hereby granted
1277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * without fee, provided the above notices are retained on all copies.
1377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Permission to modify the code and to distribute modified code is granted,
1477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * provided the above notices are retained, and a notice that the code was
1577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * modified is included with the above copyright notice.
1677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */
1777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
1877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_DBG_STRING_H
1977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#define _STLP_DBG_STRING_H
2077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
2177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_DBG_ITERATOR_H
2277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  include <stl/debug/_iterator.h>
2377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
2477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
2577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_BEGIN_NAMESPACE
2677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
2777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#define _STLP_NON_DBG_STRING_NAME _STLP_NON_DBG_NAME(str)
2877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#define _STLP_NON_DBG_STRING _STLP_PRIV _STLP_NON_DBG_STRING_NAME <_CharT, _Traits, _Alloc>
2977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
3077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_DEBUG_USE_DISTINCT_VALUE_TYPE_HELPERS)
3177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _CharT,class _Traits, class _Alloc>
3277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _CharT*
3377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervalue_type(const _STLP_PRIV _DBG_iter_base< _STLP_NON_DBG_STRING >&)
3477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return (_CharT*)0; }
3577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _CharT, class _Traits, class _Alloc>
3677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline random_access_iterator_tag
3777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turneriterator_category(const _STLP_PRIV _DBG_iter_base< _STLP_NON_DBG_STRING >&)
3877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return random_access_iterator_tag(); }
3977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
4077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
4177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _CharT, class _Traits, class _Alloc>
4277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerclass basic_string :
4377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (__DMC__)
4477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                     private
4577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#else
4677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                     public
4777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
4877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                             _STLP_PRIV __construct_checker<_STLP_NON_DBG_STRING >
4977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (basic_string)
5077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                   , public __stlport_class<basic_string<_CharT, _Traits, _Alloc> >
5177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
5277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{
5377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerprotected:
5477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef _STLP_NON_DBG_STRING _Base;
5577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef basic_string<_CharT, _Traits, _Alloc> _Self;
5677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef _STLP_PRIV __construct_checker<_STLP_NON_DBG_STRING > _ConstructCheck;
5777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef typename _IsPOD<_CharT>::_Type _Char_Is_POD;
5877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
5977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic:
6077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  __IMPORT_CONTAINER_TYPEDEFS(_Base)
6177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef typename _Base::traits_type traits_type;
6277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef _STLP_PRIV _DBG_iter<_Base, _STLP_PRIV _DbgTraits<_Nonconst_traits<value_type> > > iterator;
6377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef _STLP_PRIV _DBG_iter<_Base, _STLP_PRIV _DbgTraits<_Const_traits<value_type> > > const_iterator;
6477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DECLARE_RANDOM_ACCESS_REVERSE_ITERATORS;
6577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
6677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic:                         // Constructor, destructor, assignment.
6777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef typename _Base::_Reserve_t _Reserve_t;
6877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
6977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerprivate:
7077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Base _M_non_dbg_impl;
7177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_PRIV __owned_list _M_iter_list;
7277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
7377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void _Invalidate_all()
7477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { _M_iter_list._Invalidate_all(); }
7577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void _Compare_Capacity (size_type __old_capacity) {
7677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    if (this->capacity() > __old_capacity) {
7777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      _Invalidate_all();
7877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    }
7977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
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& __f, const iterator& __l)
8377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { _STLP_PRIV __invalidate_range(&_M_iter_list, __f, __l); }
8477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
8577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic:
8677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#include <stl/_string_npos.h>
8777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
8877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  allocator_type get_allocator() const { return _M_non_dbg_impl.get_allocator(); }
8977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
9077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  explicit basic_string(const allocator_type& __a = allocator_type())
9177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _M_non_dbg_impl(__a), _M_iter_list(&_M_non_dbg_impl) {}
9277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
9377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  basic_string(_Reserve_t __r, size_t __n,
9477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner               const allocator_type& __a = allocator_type())
9577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _M_non_dbg_impl(__r, __n, __a), _M_iter_list(&_M_non_dbg_impl) {}
9677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
9777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  basic_string(const _Self& __s)
9877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _ConstructCheck(__s),
9977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      _M_non_dbg_impl(__s._M_non_dbg_impl), _M_iter_list(&_M_non_dbg_impl) {}
10077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
10177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  basic_string(const _Self& __s, size_type __pos, size_type __n = npos,
10277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner               const allocator_type& __a = allocator_type())
10377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _M_non_dbg_impl(__s._M_non_dbg_impl, __pos, __n, __a),
10477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      _M_iter_list(&_M_non_dbg_impl) {}
10577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
10677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  basic_string(const _CharT* __s, size_type __n,
10777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner               const allocator_type& __a = allocator_type())
10877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _ConstructCheck(__s), _M_non_dbg_impl(__s, __n, __a),
10977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      _M_iter_list(&_M_non_dbg_impl) {}
11077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
11177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  basic_string(const _CharT* __s,
11277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner               const allocator_type& __a = allocator_type())
11377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _ConstructCheck(__s),
11477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      _M_non_dbg_impl(__s, __a), _M_iter_list(&_M_non_dbg_impl) {}
11577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
11677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  basic_string(size_type __n, _CharT __c,
11777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner               const allocator_type& __a = allocator_type())
11877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _M_non_dbg_impl(__n, __c, __a), _M_iter_list(&_M_non_dbg_impl) {}
11977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
12077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_NO_MOVE_SEMANTIC)
12177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  basic_string(__move_source<_Self> src)
12277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _M_non_dbg_impl(__move_source<_Base >(src.get()._M_non_dbg_impl)),
12377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      _M_iter_list(&_M_non_dbg_impl) {
12477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  if defined (_STLP_NO_EXTENSIONS) || (_STLP_DEBUG_LEVEL == _STLP_STANDARD_DBG_LEVEL)
12577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    src.get()._M_iter_list._Invalidate_all();
12677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  else
12777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    src.get()._M_iter_list._Set_owner(_M_iter_list);
12877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  endif
12977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
13077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
13177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
13277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_MEMBER_TEMPLATES)
13377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  basic_string(const _CharT* __f, const _CharT* __l,
13477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner               const allocator_type& __a = allocator_type())
13577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _ConstructCheck(__f, __l),
13677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      _M_non_dbg_impl(__f, __l, __a), _M_iter_list(&_M_non_dbg_impl) {
13777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
13877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  basic_string(const_iterator __f, const_iterator __l,
13977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner               const allocator_type & __a = allocator_type())
14077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _ConstructCheck(__f, __l),
14177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      _M_non_dbg_impl(__f._M_iterator, __l._M_iterator, __a), _M_iter_list(&_M_non_dbg_impl) {
14277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
14377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#else
14477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  template <class _InputIterator>
14577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  basic_string(_InputIterator __f, _InputIterator __l,
14677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner               const allocator_type & __a _STLP_ALLOCATOR_TYPE_DFL)
14777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _ConstructCheck(__f, __l),
14877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      _M_non_dbg_impl(_STLP_PRIV _Non_Dbg_iter(__f), _STLP_PRIV _Non_Dbg_iter(__l), __a),
14977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      _M_iter_list(&_M_non_dbg_impl) {}
15077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  if defined (_STLP_NEEDS_EXTRA_TEMPLATE_CONSTRUCTORS)
15177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  template <class _InputIterator>
15277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  basic_string(_InputIterator __f, _InputIterator __l)
15377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _ConstructCheck(__f, __l),
15477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      _M_non_dbg_impl(_STLP_PRIV _Non_Dbg_iter(__f), _STLP_PRIV _Non_Dbg_iter(__l)),
15577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      _M_iter_list(&_M_non_dbg_impl) {}
15677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  endif
15777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
15877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
15977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerprivate:
16077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // constructor from non-debug version for substr
16177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  basic_string (const _Base& __x)
16277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _M_non_dbg_impl(__x), _M_iter_list(&_M_non_dbg_impl) {}
16377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
16477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic:
16577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator=(const _Self& __s) {
16677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    if (this != &__s) {
16777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      assign(__s);
16877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    }
16977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
17077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
17177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
17277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator=(const _CharT* __s) {
17377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_FIX_LITERAL_BUG(__s)
17477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
17577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return assign(__s);
17677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
17777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
17877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator=(_CharT __c) {
17977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return assign(1, __c);
18077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
18177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
18277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Iterators.
18377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  iterator begin() { return iterator(&_M_iter_list, _M_non_dbg_impl.begin()); }
18477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const_iterator begin() const { return const_iterator(&_M_iter_list, _M_non_dbg_impl.begin()); }
18577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  iterator end() { return iterator(&_M_iter_list, _M_non_dbg_impl.end()); }
18677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const_iterator end() const { return const_iterator(&_M_iter_list, _M_non_dbg_impl.end()); }
18777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
18877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  reverse_iterator rbegin()             { return reverse_iterator(end()); }
18977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); }
19077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  reverse_iterator rend()               { return reverse_iterator(begin()); }
19177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const_reverse_iterator rend() const   { return const_reverse_iterator(begin()); }
19277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
19377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Size, capacity, etc.
19477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type size() const { return _M_non_dbg_impl.size(); }
19577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type length() const { return _M_non_dbg_impl.length(); }
19677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_t max_size() const { return _M_non_dbg_impl.max_size(); }
19777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
19877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void resize(size_type __n, _CharT __c) {
19977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    if (__n > capacity())
20077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      _Invalidate_all();
20177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    else if (__n < size())
20277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      _Invalidate_iterators(begin() + __n, end());
20377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.resize(__n, __c);
20477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
20577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void resize(size_type __n) { resize(__n, _STLP_DEFAULT_CONSTRUCTED(_CharT)); }
20677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type capacity() const { return _M_non_dbg_impl.capacity(); }
20777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
20877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void reserve(size_type __s = 0) {
20977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    if (__s > capacity()) _Invalidate_all();
21077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.reserve(__s);
21177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
21277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
21377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void clear() {
21477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Invalidate_all();
21577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.clear();
21677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
21777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
21877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  bool empty() const { return _M_non_dbg_impl.empty(); }
21977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
22077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const_reference operator[](size_type __n) const {
22177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_VERBOSE_ASSERT(__n <= this->size(), _StlMsg_OUT_OF_BOUNDS);
22277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return _M_non_dbg_impl[__n];
22377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
22477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
22577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  reference operator[](size_type __n) {
22677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_VERBOSE_ASSERT(__n < this->size(), _StlMsg_OUT_OF_BOUNDS)
22777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return _M_non_dbg_impl[__n];
22877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
22977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
23077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const_reference at(size_type __n) const { return _M_non_dbg_impl.at(__n); }
23177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  reference at(size_type __n) { return _M_non_dbg_impl.at(__n); }
23277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
23377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Append, operator+=, push_back.
23477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator+=(const _Self& __s) { return append(__s); }
23577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator+=(const _CharT* __s) {
23677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_FIX_LITERAL_BUG(__s)
23777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
23877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return append(__s);
23977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
24077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator+=(_CharT __c) { return append(1, __c); }
24177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
24277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_MEMBER_TEMPLATES)
24377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  template <class _InputIter>
24477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& append(_InputIter __first, _InputIter __last) {
24577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
24677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    size_type __old_capacity = capacity();
24777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.append(_STLP_PRIV _Non_Dbg_iter(__first), _STLP_PRIV _Non_Dbg_iter(__last));
24877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Compare_Capacity(__old_capacity);
24977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
25077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
25177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
25277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
25377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_MEMBER_TEMPLATES) || \
25477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    !defined (_STLP_NO_METHOD_SPECIALIZATION) && !defined (_STLP_NO_EXTENSIONS)
25577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& append(const _CharT* __f, const _CharT* __l) {
25677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_FIX_LITERAL_BUG(__f) _STLP_FIX_LITERAL_BUG(__l)
25777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_ptr_range(__f, __l))
25877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    size_type __old_capacity = capacity();
25977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.append(__f, __l);
26077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Compare_Capacity(__old_capacity);
26177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
26277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
26377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
26477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& append(const_iterator __f, const_iterator __l) {
26577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__f, __l))
26677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    size_type __old_capacity = capacity();
26777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.append(__f._M_iterator, __l._M_iterator);
26877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Compare_Capacity(__old_capacity);
26977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
27077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
27177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
27277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
27377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& append(const _Self& __s) {
27477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    size_type __old_capacity = capacity();
27577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.append(__s._M_non_dbg_impl);
27677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Compare_Capacity(__old_capacity);
27777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
27877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
27977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
28077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& append(const _Self& __s, size_type __pos, size_type __n) {
28177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    size_type __old_capacity = capacity();
28277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.append(__s._M_non_dbg_impl, __pos, __n);
28377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Compare_Capacity(__old_capacity);
28477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
28577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
28677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
28777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& append(const _CharT* __s, size_type __n) {
28877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_FIX_LITERAL_BUG(__s)
28977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
29077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    size_type __old_capacity = capacity();
29177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.append(__s, __n);
29277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Compare_Capacity(__old_capacity);
29377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
29477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
29577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
29677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& append(const _CharT* __s) {
29777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_FIX_LITERAL_BUG(__s)
29877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
29977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    size_type __old_capacity = capacity();
30077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.append(__s);
30177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Compare_Capacity(__old_capacity);
30277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
30377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
30477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
30577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& append(size_type __n, _CharT __c) {
30677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    size_type __old_capacity = this->capacity();
30777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.append(__n, __c);
30877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Compare_Capacity(__old_capacity);
30977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
31077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
31177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
31277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void push_back(_CharT __c) {
31377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    size_type __old_capacity = this->capacity();
31477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.push_back(__c);
31577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Compare_Capacity(__old_capacity);
31677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
31777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
31877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void pop_back() {
31977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Invalidate_iterator(this->end());
32077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.pop_back();
32177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
32277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
32377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Assign
32477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& assign(const _Self& __s) {
32577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Invalidate_all();
32677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.assign(__s._M_non_dbg_impl);
32777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
32877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
32977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
33077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& assign(const _Self& __s, size_type __pos, size_type __n) {
33177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    if (__pos < __s.size()) {
33277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      _Invalidate_all();
33377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    }
33477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.assign(__s._M_non_dbg_impl, __pos, __n);
33577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
33677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
33777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
33877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& assign(const _CharT* __s, size_type __n) {
33977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_FIX_LITERAL_BUG(__s)
34077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
34177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Invalidate_all();
34277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.assign(__s, __s + __n);
34377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
34477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
34577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
34677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& assign(const _CharT* __s) {
34777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_FIX_LITERAL_BUG(__s)
34877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
34977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Invalidate_all();
35077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.assign(__s);
35177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
35277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
35377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
35477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& assign(size_type __n, _CharT __c) {
35577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Invalidate_all();
35677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.assign(__n, __c);
35777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
35877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
35977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
36077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined(_STLP_MEMBER_TEMPLATES)
36177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  template <class _InputIter>
36277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  inline _Self& assign(_InputIter __first, _InputIter __last) {
36377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_FIX_LITERAL_BUG(__first) _STLP_FIX_LITERAL_BUG(__last)
36477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last))
36577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Invalidate_all();
36677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.assign(_STLP_PRIV _Non_Dbg_iter(__first), _STLP_PRIV _Non_Dbg_iter(__last));
36777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
36877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
36977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
37077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
37177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_MEMBER_TEMPLATES) || \
37277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    !defined (_STLP_NO_METHOD_SPECIALIZATION) && !defined (_STLP_NO_EXTENSIONS)
37377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& assign(const _CharT* __f, const _CharT* __l) {
37477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_FIX_LITERAL_BUG(__f) _STLP_FIX_LITERAL_BUG(__l)
37577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_ptr_range(__f, __l))
37677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Invalidate_all();
37777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.assign(__f, __l);
37877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
37977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
38077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& assign(const_iterator __f, const_iterator __l) {
38177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__f, __l))
38277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Invalidate_all();
38377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.assign(__f._M_iterator, __l._M_iterator);
38477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
38577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
38677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
38777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
38877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Insert
38977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& insert(size_type __pos, const _Self& __s) {
39077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    size_type __old_capacity = capacity();
39177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.insert(__pos, __s._M_non_dbg_impl);
39277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Compare_Capacity(__old_capacity);
39377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
39477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
39577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
39677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& insert(size_type __pos, const _Self& __s,
39777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                size_type __beg, size_type __n) {
39877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    size_type __old_capacity = capacity();
39977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.insert(__pos, __s._M_non_dbg_impl, __beg, __n);
40077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Compare_Capacity(__old_capacity);
40177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
40277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
40377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
40477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& insert(size_type __pos, const _CharT* __s, size_type __n) {
40577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_FIX_LITERAL_BUG(__s)
40677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
40777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    size_type __old_capacity = capacity();
40877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.insert(__pos, __s, __n);
40977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Compare_Capacity(__old_capacity);
41077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
41177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
41277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
41377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& insert(size_type __pos, const _CharT* __s) {
41477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_FIX_LITERAL_BUG(__s)
41577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
41677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return insert(__pos, __s, _Traits::length(__s));
41777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
41877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
41977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& insert(size_type __pos, size_type __n, _CharT __c) {
42077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    size_type __old_capacity = capacity();
42177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.insert(__pos, __n, __c);
42277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Compare_Capacity(__old_capacity);
42377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
42477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
42577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
42677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  iterator insert(iterator __p, _CharT __c) {
42777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__p))
42877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    size_type __old_capacity = capacity();
42977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    typename _Base::iterator __ret = _M_non_dbg_impl.insert(__p._M_iterator, __c);
43077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Compare_Capacity(__old_capacity);
43177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return iterator(&_M_iter_list, __ret);
43277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
43377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
43477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void insert(iterator __p, size_t __n, _CharT __c) {
43577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__p))
43677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    size_type __old_capacity = capacity();
43777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.insert(__p._M_iterator, __n, __c);
43877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Compare_Capacity(__old_capacity);
43977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
44077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
44177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_MEMBER_TEMPLATES)
44277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  template <class _InputIter>
44377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void insert(iterator __p, _InputIter __first, _InputIter __last) {
44477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__p))
44577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first,__last))
44677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
44777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    size_type __old_capacity = this->capacity();
44877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.insert(__p._M_iterator,
44977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                           _STLP_PRIV _Non_Dbg_iter(__first), _STLP_PRIV _Non_Dbg_iter(__last));
45077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Compare_Capacity(__old_capacity);
45177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
45277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
45377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
45477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_MEMBER_TEMPLATES)
45577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void insert(iterator __p, const _CharT* __f, const _CharT* __l) {
45677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_FIX_LITERAL_BUG(__f)_STLP_FIX_LITERAL_BUG(__l)
45777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__p))
45877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_ptr_range(__f,__l))
45977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    size_type __old_capacity = capacity();
46077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.insert(__p._M_iterator, __f, __l);
46177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Compare_Capacity(__old_capacity);
46277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
46377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
46477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
46577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_MEMBER_TEMPLATES) || !defined (_STLP_NO_METHOD_SPECIALIZATION)
46677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Those overloads are necessary to check self referencing correctly in non debug
46777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // basic_string implementation
46877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void insert(iterator __p, const_iterator __f, const_iterator __l) {
46977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__p))
47077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__f,__l))
47177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  if (_STLP_DEBUG_LEVEL == _STLP_STANDARD_DBG_LEVEL)
47277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_STD_DEBUG_CHECK(__check_if_not_owner(&_M_iter_list, __f))
47377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  endif
47477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    size_type __old_capacity = capacity();
47577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.insert(__p._M_iterator, __f._M_iterator, __l._M_iterator);
47677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Compare_Capacity(__old_capacity);
47777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
47877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void insert(iterator __p, iterator __f, iterator __l) {
47977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__p))
48077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__f,__l))
48177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  if (_STLP_DEBUG_LEVEL == _STLP_STANDARD_DBG_LEVEL)
48277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_STD_DEBUG_CHECK(__check_if_not_owner(&_M_iter_list, __f))
48377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  endif
48477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    size_type __old_capacity = capacity();
48577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.insert(__p._M_iterator, __f._M_iterator, __l._M_iterator);
48677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Compare_Capacity(__old_capacity);
48777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
48877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
48977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
49077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Erase.
49177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& erase(size_type __pos = 0, size_type __n = npos) {
49277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    if (__pos < size()) {
49377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      _Invalidate_iterators(begin() + __pos, end());
49477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    }
49577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.erase(__pos, __n);
49677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
49777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
49877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  iterator erase(iterator __pos) {
49977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV _Dereferenceable(__pos))
50077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list,__pos))
50177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Invalidate_iterators(__pos, end());
50277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return iterator(&_M_iter_list, _M_non_dbg_impl.erase(__pos._M_iterator));
50377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
50477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  iterator erase(iterator __f, iterator __l) {
50577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__f, __l, begin(), end()))
50677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Invalidate_iterators(__f, end());
50777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return iterator(&_M_iter_list, _M_non_dbg_impl.erase(__f._M_iterator, __l._M_iterator));
50877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
50977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
51077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Substring.
51177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self substr(size_type __pos = 0, size_type __n = npos) const
51277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { return _M_non_dbg_impl.substr(__pos, __n); }
51377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
51477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Replace.  (Conceptually equivalent to erase followed by insert.)
51577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& replace(size_type __pos, size_type __n, const _Self& __s) {
51677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    size_type __old_capacity = capacity();
51777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.replace(__pos, __n, __s._M_non_dbg_impl);
51877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Compare_Capacity(__old_capacity);
51977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
52077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
52177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
52277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& replace(size_type __pos1, size_type __n1, const _Self& __s,
52377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                 size_type __pos2, size_type __n2) {
52477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    size_type __old_capacity = capacity();
52577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.replace(__pos1, __n1, __s._M_non_dbg_impl, __pos2, __n2);
52677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Compare_Capacity(__old_capacity);
52777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
52877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
52977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
53077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& replace(size_type __pos, size_type __n1, const _CharT* __s, size_type __n2) {
53177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_FIX_LITERAL_BUG(__s)
53277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
53377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    size_type __old_capacity = capacity();
53477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.replace(__pos, __n1, __s, __n2);
53577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Compare_Capacity(__old_capacity);
53677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
53777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
53877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
53977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& replace(size_type __pos, size_type __n1, const _CharT* __s) {
54077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_FIX_LITERAL_BUG(__s)
54177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
54277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    size_type __old_capacity = capacity();
54377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.replace(__pos, __n1, __s);
54477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Compare_Capacity(__old_capacity);
54577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
54677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
54777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
54877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& replace(size_type __pos, size_type __n1, size_type __n2, _CharT __c) {
54977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    size_type __old_capacity = capacity();
55077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.replace(__pos, __n1, __n2, __c);
55177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Compare_Capacity(__old_capacity);
55277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
55377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
55477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
55577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& replace(iterator __f, iterator __l, const _Self& __s) {
55677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__f, __l, begin(), end()))
55777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    size_type __old_capacity = capacity();
55877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.replace(__f._M_iterator, __l._M_iterator, __s._M_non_dbg_impl);
55977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Compare_Capacity(__old_capacity);
56077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
56177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
56277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
56377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& replace(iterator __f, iterator __l, const _CharT* __s, size_type __n) {
56477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_FIX_LITERAL_BUG(__s)
56577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__f, __l, begin(), end()))
56677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
56777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    size_type __old_capacity = capacity();
56877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.replace(__f._M_iterator, __l._M_iterator, __s, __n);
56977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Compare_Capacity(__old_capacity);
57077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
57177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
57277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
57377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& replace(iterator __f, iterator __l, const _CharT* __s) {
57477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_FIX_LITERAL_BUG(__s)
57577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__f, __l, begin(), end()))
57677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
57777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    size_type __old_capacity = capacity();
57877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.replace(__f._M_iterator, __l._M_iterator, __s);
57977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Compare_Capacity(__old_capacity);
58077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
58177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
58277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
58377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& replace(iterator __f, iterator __l, size_type __n, _CharT __c) {
58477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__f, __l, begin(), end()))
58577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    size_type __old_capacity = capacity();
58677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.replace(__f._M_iterator, __l._M_iterator, __n, __c);
58777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Compare_Capacity(__old_capacity);
58877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
58977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
59077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
59177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_MEMBER_TEMPLATES)
59277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  template <class _InputIter>
59377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& replace(iterator __first, iterator __last,
59477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                 _InputIter __f, _InputIter __l) {
59577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last, begin(), end()))
59677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__f, __l))
59777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
59877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    size_type __old_capacity = capacity();
59977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.replace(__first._M_iterator, __last._M_iterator,
60077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                            _STLP_PRIV _Non_Dbg_iter(__f), _STLP_PRIV _Non_Dbg_iter(__l));
60177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Compare_Capacity(__old_capacity);
60277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
60377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
60477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
60577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
60677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_MEMBER_TEMPLATES)
60777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& replace(iterator __first, iterator __last,
60877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                 const _CharT* __f, const _CharT* __l) {
60977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_FIX_LITERAL_BUG(__f)_STLP_FIX_LITERAL_BUG(__l)
61077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last, begin(), end()))
61177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_ptr_range(__f, __l))
61277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    size_type __old_capacity = capacity();
61377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.replace(__first._M_iterator, __last._M_iterator, __f, __l);
61477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Compare_Capacity(__old_capacity);
61577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
61677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
61777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
61877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
61977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_MEMBER_TEMPLATES) || !defined (_STLP_NO_METHOD_SPECIALIZATION)
62077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& replace(iterator __first, iterator __last,
62177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                 const_iterator __f, const_iterator __l) {
62277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last, begin(), end()))
62377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__f, __l))
62477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    size_type __old_capacity = capacity();
62577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.replace(__first._M_iterator, __last._M_iterator,
62677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                            __f._M_iterator, __l._M_iterator);
62777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Compare_Capacity(__old_capacity);
62877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
62977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
63077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& replace(iterator __first, iterator __last,
63177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                 iterator __f, iterator __l) {
63277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last, begin(), end()))
63377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__f, __l))
63477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    size_type __old_capacity = capacity();
63577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.replace(__first._M_iterator, __last._M_iterator,
63677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                            __f._M_iterator, __l._M_iterator);
63777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Compare_Capacity(__old_capacity);
63877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
63977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
64077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
64177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
64277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Other modifier member functions.
64377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void swap(_Self& __s) {
64477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_iter_list._Swap_owners(__s._M_iter_list);
64577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.swap(__s._M_non_dbg_impl);
64677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
64777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER)
64877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void _M_swap_workaround(_Self& __x) { swap(__x); }
64977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
65077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
65177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  int compare(const _Self& __s) const
65277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { return _M_non_dbg_impl.compare(__s._M_non_dbg_impl); }
65377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  int compare(size_type __pos, size_type __n, const _Self& __s) const
65477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { return _M_non_dbg_impl.compare(__pos, __n, __s._M_non_dbg_impl); }
65577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  int compare(size_type __pos1, size_type __n1, const _Self& __s,
65677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner              size_type __pos2, size_type __n2) const
65777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { return _M_non_dbg_impl.compare(__pos1, __n1, __s._M_non_dbg_impl, __pos2, __n2); }
65877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  int compare(const _CharT* __s) const {
65977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_FIX_LITERAL_BUG(__s)
66077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return _M_non_dbg_impl.compare(__s);
66177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
66277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  int compare(size_type __pos, size_type __n, const _CharT* __s) const {
66377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_FIX_LITERAL_BUG(__s)
66477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return _M_non_dbg_impl.compare(__pos, __n, __s);
66577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
66677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  int compare(size_type __pos1, size_type __n1, const _CharT* __s,
66777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner              size_type __n2) const {
66877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_FIX_LITERAL_BUG(__s)
66977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return _M_non_dbg_impl.compare(__pos1, __n1, __s, __n2);
67077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
67177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
67277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // Helper functions for compare.
67377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  static int _STLP_CALL _M_compare(const _CharT* __f1, const _CharT* __l1,
67477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                   const _CharT* __f2, const _CharT* __l2)
67577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { return _Base::_M_compare(__f1, __l1, __f2, __l2); }
67677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  static int _STLP_CALL _M_compare(const_iterator __f1, const_iterator __l1,
67777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                   const _CharT* __f2, const _CharT* __l2)
67877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { return _Base::_M_compare(__f1._M_iterator, __l1._M_iterator, __f2, __l2); }
67977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  static int _STLP_CALL _M_compare(const _CharT* __f1, const _CharT* __l1,
68077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                   const_iterator __f2, const_iterator __l2)
68177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { return _Base::_M_compare(__f1, __l1, __f2._M_iterator, __l2._M_iterator); }
68277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  static int _STLP_CALL _M_compare(const_iterator __f1, const_iterator __l1,
68377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                   const_iterator __f2, const_iterator __l2)
68477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { return _Base::_M_compare(__f1._M_iterator, __l1._M_iterator, __f2._M_iterator, __l2._M_iterator); }
68577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
68677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const _CharT* c_str() const { return _M_non_dbg_impl.c_str(); }
68777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const _CharT* data()  const { return _M_non_dbg_impl.data(); }
68877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
68977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type copy(_CharT* __s, size_type __n, size_type __pos = 0) const
69077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { return _M_non_dbg_impl.copy(__s, __n, __pos); }
69177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
69277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // find.
69377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type find(const _Self& __s, size_type __pos = 0) const
69477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { return _M_non_dbg_impl.find(__s._M_non_dbg_impl, __pos); }
69577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type find(const _CharT* __s, size_type __pos = 0) const {
69677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_FIX_LITERAL_BUG(__s)
69777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
69877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return _M_non_dbg_impl.find(__s, __pos);
69977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
70077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type find(const _CharT* __s, size_type __pos, size_type __n) const {
70177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_FIX_LITERAL_BUG(__s)
70277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
70377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return _M_non_dbg_impl.find(__s, __pos, __n);
70477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
70577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // WIE: Versant schema compiler 5.2.2 ICE workaround
70677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type find(_CharT __c) const { return find(__c, 0); }
70777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type find(_CharT __c, size_type __pos /* = 0 */) const
70877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { return _M_non_dbg_impl.find(__c, __pos); }
70977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
71077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // rfind.
71177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type rfind(const _Self& __s, size_type __pos = npos) const
71277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { return _M_non_dbg_impl.rfind(__s._M_non_dbg_impl, __pos); }
71377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type rfind(const _CharT* __s, size_type __pos = npos) const {
71477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_FIX_LITERAL_BUG(__s)
71577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
71677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return _M_non_dbg_impl.rfind(__s, __pos);
71777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
71877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type rfind(const _CharT* __s, size_type __pos, size_type __n) const {
71977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_FIX_LITERAL_BUG(__s)
72077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
72177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return _M_non_dbg_impl.rfind(__s, __pos, __n);
72277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
72377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type rfind(_CharT __c, size_type __pos = npos) const
72477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { return _M_non_dbg_impl.rfind(__c, __pos); }
72577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
72677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // find_first_of
72777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type find_first_of(const _Self& __s, size_type __pos = 0) const
72877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { return _M_non_dbg_impl.find_first_of(__s._M_non_dbg_impl, __pos); }
72977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type find_first_of(const _CharT* __s, size_type __pos = 0) const {
73077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_FIX_LITERAL_BUG(__s)
73177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
73277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return _M_non_dbg_impl.find_first_of(__s, __pos);
73377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
73477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type find_first_of(const _CharT* __s, size_type __pos, size_type __n) const {
73577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_FIX_LITERAL_BUG(__s)
73677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
73777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return _M_non_dbg_impl.find_first_of(__s, __pos, __n);
73877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
73977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type find_first_of(_CharT __c, size_type __pos = 0) const
74077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { return _M_non_dbg_impl.find_first_of(__c, __pos); }
74177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
74277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // find_last_of
74377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type find_last_of(const _Self& __s, size_type __pos = npos) const
74477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { return _M_non_dbg_impl.find_last_of(__s._M_non_dbg_impl, __pos); }
74577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type find_last_of(const _CharT* __s, size_type __pos = npos) const {
74677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_FIX_LITERAL_BUG(__s)
74777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
74877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return _M_non_dbg_impl.find_last_of(__s, __pos);
74977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
75077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type find_last_of(const _CharT* __s, size_type __pos, size_type __n) const {
75177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_FIX_LITERAL_BUG(__s)
75277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
75377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return _M_non_dbg_impl.find_last_of(__s, __pos, __n);
75477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
75577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type find_last_of(_CharT __c, size_type __pos = npos) const
75677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { return _M_non_dbg_impl.rfind(__c, __pos); }
75777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
75877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // find_first_not_of
75977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type find_first_not_of(const _Self& __s, size_type __pos = 0) const
76077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { return _M_non_dbg_impl.find_first_not_of(__s._M_non_dbg_impl, __pos); }
76177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type find_first_not_of(const _CharT* __s, size_type __pos = 0) const {
76277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_FIX_LITERAL_BUG(__s)
76377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
76477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return _M_non_dbg_impl.find_first_not_of(__s, __pos);
76577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
76677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type find_first_not_of(const _CharT* __s, size_type __pos, size_type __n) const {
76777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_FIX_LITERAL_BUG(__s)
76877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
76977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return _M_non_dbg_impl.find_first_not_of(__s, __pos, __n);
77077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
77177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type find_first_not_of(_CharT __c, size_type __pos = 0) const
77277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { return _M_non_dbg_impl.find_first_not_of(__c, __pos); }
77377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
77477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // find_last_not_of
77577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type find_last_not_of(const _Self& __s, size_type __pos = npos) const
77677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { return _M_non_dbg_impl.find_last_not_of(__s._M_non_dbg_impl, __pos); }
77777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type find_last_not_of(const _CharT* __s, size_type __pos = npos) const {
77877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_FIX_LITERAL_BUG(__s)
77977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
78077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return _M_non_dbg_impl.find_last_not_of(__s, __pos);
78177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
78277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type find_last_not_of(const _CharT* __s, size_type __pos, size_type __n) const {
78377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_FIX_LITERAL_BUG(__s)
78477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_VERBOSE_ASSERT((__s != 0), _StlMsg_INVALID_ARGUMENT)
78577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return _M_non_dbg_impl.find_last_not_of(__s, __pos, __n);
78677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
78777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type find_last_not_of(_CharT __c, size_type __pos = npos) const
78877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { return _M_non_dbg_impl.find_last_not_of(__c, __pos); }
78977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
79077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_USE_TEMPLATE_EXPRESSION)
79177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  include <stl/debug/_string_sum_methods.h>
79277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
79377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner};
79477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
79577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// This is a hook to instantiate STLport exports in a designated DLL
79677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_USE_TEMPLATE_EXPORT) && !defined (_STLP_USE_MSVC6_MEM_T_BUG_WORKAROUND)
79777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_PRIV_NAMESPACE
79877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_EXPORT_TEMPLATE_CLASS __construct_checker<_STLP_NON_DBG_STRING_NAME <char, char_traits<char>, allocator<char> > >;
79977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_STD_NAMESPACE
80077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_EXPORT_TEMPLATE_CLASS basic_string<char, char_traits<char>, allocator<char> >;
80177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  if defined (_STLP_HAS_WCHAR_T)
80277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_PRIV_NAMESPACE
80377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_EXPORT_TEMPLATE_CLASS __construct_checker<_STLP_NON_DBG_STRING_NAME <wchar_t, char_traits<wchar_t>, allocator<wchar_t> > >;
80477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_STD_NAMESPACE
80577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_EXPORT_TEMPLATE_CLASS basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> >;
80677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  endif
80777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
80877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
80977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#undef _STLP_NON_DBG_STRING
81077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#undef _STLP_NON_DBG_STRING_NAME
81177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
81277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (__GNUC__) && (__GNUC__ == 2) && (__GNUC_MINOR__ == 96)
81377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _CharT, class _Traits, class _Alloc>
81477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerconst size_t basic_string<_CharT, _Traits, _Alloc>::npos = ~(size_t) 0;
81577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
81677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
81777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (basic_string)
81877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_STD_NAMESPACE
81977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#undef basic_string
82077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
82177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
82277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_END_NAMESPACE
82377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
82477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif /* _STLP_DBG_STRING */
82577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
82677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Local Variables:
82777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// mode:C++
82877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// End:
829