19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* 29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 2004 39720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Francois Dumont 49720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 59720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * This material is provided "as is", with absolutely no warranty expressed 69720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * or implied. Any use is at your own risk. 79720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 89720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to use or copy this software for any purpose is hereby granted 99720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * without fee, provided the above notices are retained on all copies. 109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to modify the code and to distribute modified code is granted, 119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * provided the above notices are retained, and a notice that the code was 129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * modified is included with the above copyright notice. 139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//Included from _string.h, no need for macro guarding. 179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE 199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_DEBUG) 219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define basic_string _STLP_NON_DBG_NAME(str) 229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE 239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_NO_MEM_T_STRING_BASE _STLP_PRIV _STLP_NO_MEM_T_NAME(str)<_CharT, _Traits, _Alloc> 269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits, class _Alloc> 289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass basic_string : public _STLP_NO_MEM_T_STRING_BASE 29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (basic_string) 309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block , public __stlport_class<basic_string<_CharT, _Traits, _Alloc> > 319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ 33e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottprivate: // Protected members inherited from base. 349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef basic_string<_CharT, _Traits, _Alloc> _Self; 359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _STLP_NO_MEM_T_STRING_BASE _Base; 36e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef typename _Base::_CalledFromWorkaround_t _CalledFromWorkaround_t; 379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __IMPORT_WITH_REVERSE_ITERATORS(_Base) 409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Base::_Iterator_category _Iterator_category; 429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Base::traits_type traits_type; 439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Base::_Reserve_t _Reserve_t; 449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 45e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#include <stl/_string_npos.h> 46e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // Constructor, destructor, assignment. 489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block explicit basic_string(const allocator_type& __a = allocator_type()) 499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _STLP_NO_MEM_T_STRING_BASE(__a) {} 509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block basic_string(_Reserve_t __r, size_t __n, 529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const allocator_type& __a = allocator_type()) 539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _STLP_NO_MEM_T_STRING_BASE(__r, __n, __a) {} 549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block basic_string(const _Self& __s) 569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _STLP_NO_MEM_T_STRING_BASE(__s) {} 579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block basic_string(const _Self& __s, size_type __pos, size_type __n = npos, 599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const allocator_type& __a = allocator_type()) 609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _STLP_NO_MEM_T_STRING_BASE(__s, __pos, __n, __a) {} 619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block basic_string(const _CharT* __s, size_type __n, 639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const allocator_type& __a = allocator_type()) 649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _STLP_NO_MEM_T_STRING_BASE(__s, __n, __a) {} 659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block basic_string(const _CharT* __s, 679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const allocator_type& __a = allocator_type()) 689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _STLP_NO_MEM_T_STRING_BASE(__s, __a) {} 699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block basic_string(size_type __n, _CharT __c, 719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const allocator_type& __a = allocator_type()) 729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _STLP_NO_MEM_T_STRING_BASE(__n, __c, __a) {} 739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 74e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_MOVE_SEMANTIC) 759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block basic_string(__move_source<_Self> src) 769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _STLP_NO_MEM_T_STRING_BASE(__move_source<_Base>(src.get())) {} 77e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Check to see if _InputIterator is an integer type. If so, then 809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // it can't be an iterator. 819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIterator> 829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block basic_string(_InputIterator __f, _InputIterator __l, 839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const allocator_type & __a _STLP_ALLOCATOR_TYPE_DFL) 84e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott : _STLP_NO_MEM_T_STRING_BASE(_CalledFromWorkaround_t(), __a) { 859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _IsIntegral<_InputIterator>::_Ret _Integral; 869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_initialize_dispatch(__f, __l, _Integral()); 879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if defined (_STLP_NEEDS_EXTRA_TEMPLATE_CONSTRUCTORS) 899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIterator> 909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block basic_string(_InputIterator __f, _InputIterator __l) 91e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott : _STLP_NO_MEM_T_STRING_BASE(_CalledFromWorkaround_t(), allocator_type()) { 929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _IsIntegral<_InputIterator>::_Ret _Integral; 939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_initialize_dispatch(__f, __l, _Integral()); 949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator=(const _Self& __s) { 989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::operator=(__s); 999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator=(const _CharT* __s) { 1039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::operator=(__s); 1049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 1059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator=(_CharT __c) { 1089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::operator=(__c); 1099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 1109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate: 1139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIter> 1149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_range_initialize(_InputIter __f, _InputIter __l, 1159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const input_iterator_tag &__tag) { 1169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_allocate_block(); 1179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_construct_null(this->_M_Finish()); 118e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _M_appendT(__f, __l, __tag); 1199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _ForwardIter> 1229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_range_initialize(_ForwardIter __f, _ForwardIter __l, 1239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const forward_iterator_tag &) { 124e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott difference_type __n = _STLP_STD::distance(__f, __l); 1259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_allocate_block(__n + 1); 1269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish = uninitialized_copy(__f, __l, this->_M_Start()); 1279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_terminate_string(); 1289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIter> 1319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_range_initializeT(_InputIter __f, _InputIter __l) { 1329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_range_initialize(__f, __l, _STLP_ITERATOR_CATEGORY(__f, _InputIter)); 1339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Integer> 1369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_initialize_dispatch(_Integer __n, _Integer __x, const __true_type& /*_Integral*/) { 1379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_allocate_block(__n + 1); 1389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish = uninitialized_fill_n(this->_M_Start(), __n, __x); 1399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_terminate_string(); 1409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIter> 1439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_initialize_dispatch(_InputIter __f, _InputIter __l, const __false_type& /*_Integral*/) { 1449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_range_initializeT(__f, __l); 1459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // Append, operator+=, push_back. 1489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator+=(const _Self& __s) { 1499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::operator+=(__s); 1509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 1519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator+=(const _CharT* __s) { 1539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__s) 1549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::operator+=(__s); 1559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 1569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator+=(_CharT __c) { 1589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::operator+=(__c); 1599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 1609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& append(const _Self& __s) { 1639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::append(__s); 1649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 1659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& append(const _Self& __s, 1689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type __pos, size_type __n) { 1699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::append(__s, __pos, __n); 1709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 1719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& append(const _CharT* __s, size_type __n) { 1749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__s) 1759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::append(__s, __n); 1769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 1779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& append(const _CharT* __s) { 1799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__s) 1809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::append(__s); 1819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 1829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& append(size_type __n, _CharT __c) { 1849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::append(__n, __c); 1859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 1869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Check to see if _InputIterator is an integer type. If so, then 1899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // it can't be an iterator. 1909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIter> 1919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& append(_InputIter __first, _InputIter __last) { 1929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _IsIntegral<_InputIter>::_Ret _Integral; 1939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return _M_append_dispatch(__first, __last, _Integral()); 1949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_NO_METHOD_SPECIALIZATION) && !defined (_STLP_NO_EXTENSIONS) 1979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //See equivalent assign method remark. 1989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& append(const _CharT* __f, const _CharT* __l) { 1999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__f)_STLP_FIX_LITERAL_BUG(__l) 2009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::append(__f, __l); 2019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 2029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 2049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate: // Helper functions for append. 2069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIter> 2089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& _M_appendT(_InputIter __first, _InputIter __last, 2099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const input_iterator_tag &) { 2109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for ( ; __first != __last ; ++__first) 2119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::push_back(*__first); 2129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 2139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _ForwardIter> 2169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& _M_appendT(_ForwardIter __first, _ForwardIter __last, 2179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const forward_iterator_tag &) { 2189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__first != __last) { 219e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const size_type __n = __STATIC_CAST(size_type, _STLP_STD::distance(__first, __last)); 220e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (__n >= this->_M_rest()) { 221e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_type __len = this->_M_compute_next_size(__n); 222e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pointer __new_start = this->_M_start_of_storage.allocate(__len, __len); 223e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pointer __new_finish = uninitialized_copy(this->_M_Start(), this->_M_Finish(), __new_start); 224e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott __new_finish = uninitialized_copy(__first, __last, __new_finish); 225e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott this->_M_construct_null(__new_finish); 2269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_deallocate_block(); 2279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_reset(__new_start, __new_finish, __new_start + __len); 2289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 230e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _Traits::assign(*this->_M_finish, *__first++); 231e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott uninitialized_copy(__first, __last, this->_M_Finish() + 1); 232e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott this->_M_construct_null(this->_M_Finish() + __n); 2339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish += __n; 2349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 2379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Integer> 240e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _Self& _M_append_dispatch(_Integer __n, _Integer __x, const __true_type& /*Integral*/) 241e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { return append((size_type) __n, (_CharT) __x); } 2429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIter> 244e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _Self& _M_append_dispatch(_InputIter __f, _InputIter __l, const __false_type& /*Integral*/) 245e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { return _M_appendT(__f, __l, _STLP_ITERATOR_CATEGORY(__f, _InputIter)); } 2469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // Assign 2489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& assign(const _Self& __s) { 2499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::assign(__s); 2509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 2519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& assign(const _Self& __s, 2549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type __pos, size_type __n) { 2559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::assign(__s, __pos, __n); 2569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 2579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& assign(const _CharT* __s, size_type __n) { 2609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__s) 2619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::assign(__s, __n); 2629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 2639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& assign(const _CharT* __s) { 2669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__s) 2679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::assign(__s); 2689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 2699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& assign(size_type __n, _CharT __c) { 2729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::assign(__n, __c); 2739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 2749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate: // Helper functions for assign. 2779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Integer> 279e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _Self& _M_assign_dispatch(_Integer __n, _Integer __x, const __true_type& /*_Integral*/) 280e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { return assign((size_type) __n, (_CharT) __x); } 2819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIter> 2839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& _M_assign_dispatch(_InputIter __f, _InputIter __l, const __false_type& /*_Integral*/) { 2849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block pointer __cur = this->_M_Start(); 2859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block while (__f != __l && __cur != this->_M_Finish()) { 2869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Traits::assign(*__cur, *__f); 2879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ++__f; 2889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ++__cur; 2899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__f == __l) 2919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::erase(__cur, this->_M_Finish()); 2929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else 2939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_appendT(__f, __l, _STLP_ITERATOR_CATEGORY(__f, _InputIter)); 2949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 2959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 2989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Check to see if _InputIterator is an integer type. If so, then 2999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // it can't be an iterator. 3009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIter> 3019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& assign(_InputIter __first, _InputIter __last) { 3029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _IsIntegral<_InputIter>::_Ret _Integral; 3039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return _M_assign_dispatch(__first, __last, _Integral()); 3049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_NO_METHOD_SPECIALIZATION) && !defined (_STLP_NO_EXTENSIONS) 3079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block /* This method is not part of the standard and is a specialization of the 3089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * template method assign. It is only granted for convenience to call assign 3099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * with mixed parameters iterator and const_iterator. 3109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 3119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& assign(const _CharT* __f, const _CharT* __l) { 3129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__f)_STLP_FIX_LITERAL_BUG(__l) 3139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::assign(__f, __l); 3149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 3159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 3179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // Insert 3199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& insert(size_type __pos, const _Self& __s) { 3209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::insert(__pos, __s); 3219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 3229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& insert(size_type __pos, const _Self& __s, 3259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type __beg, size_type __n) { 3269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::insert(__pos, __s, __beg, __n); 3279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 3289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& insert(size_type __pos, const _CharT* __s, size_type __n) { 3309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__s) 3319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::insert(__pos, __s, __n); 3329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 3339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& insert(size_type __pos, const _CharT* __s) { 3369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__s) 3379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::insert(__pos, __s); 3389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 3399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& insert(size_type __pos, size_type __n, _CharT __c) { 3429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::insert(__pos, __n, __c); 3439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 3449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 346e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott iterator insert(iterator __p, _CharT __c) 347e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { return _Base::insert(__p, __c); } 3489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 349e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void insert(iterator __p, size_t __n, _CharT __c) 350e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { _Base::insert(__p, __n, __c); } 3519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Check to see if _InputIterator is an integer type. If so, then 3539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // it can't be an iterator. 3549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIter> 3559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void insert(iterator __p, _InputIter __first, _InputIter __last) { 3569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _IsIntegral<_InputIter>::_Ret _Integral; 3579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_insert_dispatch(__p, __first, __last, _Integral()); 3589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 360e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_METHOD_SPECIALIZATION) 361e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottpublic: 362e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void insert(iterator __p, const _CharT* __f, const _CharT* __l) { 363e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_FIX_LITERAL_BUG(__f) _STLP_FIX_LITERAL_BUG(__l) 364e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _M_insert(__p, __f, __l, this->_M_inside(__f)); 365e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 366e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 3679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 368e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottprivate: // Helper functions for insert. 3699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_insert(iterator __p, const _CharT* __f, const _CharT* __l, bool __self_ref) { 3709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__f)_STLP_FIX_LITERAL_BUG(__l) 3719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::_M_insert(__p, __f, __l, __self_ref); 3729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _ForwardIter> 375e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void _M_insert_overflow(iterator __pos, _ForwardIter __first, _ForwardIter __last, 376e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_type __n) { 377e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_type __len = this->_M_compute_next_size(__n); 378e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pointer __new_start = this->_M_start_of_storage.allocate(__len, __len); 379e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott pointer __new_finish = uninitialized_copy(this->_M_Start(), __pos, __new_start); 380e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott __new_finish = uninitialized_copy(__first, __last, __new_finish); 381e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott __new_finish = uninitialized_copy(__pos, this->_M_Finish(), __new_finish); 382e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott this->_M_construct_null(__new_finish); 3839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_deallocate_block(); 3849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_reset(__new_start, __new_finish, __new_start + __len); 3859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIter> 3889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_insertT(iterator __p, _InputIter __first, _InputIter __last, 3899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const input_iterator_tag &) { 3909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for ( ; __first != __last; ++__first) { 3919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __p = insert(__p, *__first); 3929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ++__p; 3939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _ForwardIter> 397e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void _M_insertT(iterator __pos, _ForwardIter __first, _ForwardIter __last, 3989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const forward_iterator_tag &) { 3999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__first != __last) { 400e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_type __n = __STATIC_CAST(size_type, _STLP_STD::distance(__first, __last)); 401e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (__n < this->_M_rest()) { 402e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const size_type __elems_after = this->_M_finish - __pos; 4039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__elems_after >= __n) { 4049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block uninitialized_copy((this->_M_Finish() - __n) + 1, this->_M_Finish() + 1, this->_M_Finish() + 1); 4059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish += __n; 406e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _Traits::move(__pos + __n, __pos, (__elems_after - __n) + 1); 407e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _M_copyT(__first, __last, __pos); 4089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 4109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block pointer __old_finish = this->_M_Finish(); 4119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _ForwardIter __mid = __first; 412e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_STD::advance(__mid, __elems_after + 1); 413e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_STD::uninitialized_copy(__mid, __last, this->_M_Finish() + 1); 4149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish += __n - __elems_after; 415e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott uninitialized_copy(__pos, __old_finish + 1, this->_M_Finish()); 416e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott this->_M_finish += __elems_after; 417e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _M_copyT(__first, __mid, __pos); 4189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 421e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _M_insert_overflow(__pos, __first, __last, __n); 4229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Integer> 4279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_insert_dispatch(iterator __p, _Integer __n, _Integer __x, 428e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const __true_type& /*Integral*/) 429e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { insert(__p, (size_type) __n, (_CharT) __x); } 4309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIter> 4329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_insert_dispatch(iterator __p, _InputIter __first, _InputIter __last, 4339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __false_type& /*Integral*/) { 4349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__p) 435e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott /* We are forced to do a temporary string to avoid the self referencing issue. */ 436e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const _Self __self(__first, __last, this->get_allocator()); 437e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _M_insertT(__p, __self.begin(), __self.end(), _STLP_ITERATOR_CATEGORY(__first, _InputIter)); 4389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIterator> 4419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_copyT(_InputIterator __first, _InputIterator __last, pointer __result) { 4429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__p) 4439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for ( ; __first != __last; ++__first, ++__result) 4449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Traits::assign(*__result, *__first); 4459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_NO_METHOD_SPECIALIZATION) 4489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_copyT(const _CharT* __f, const _CharT* __l, _CharT* __res) { 4499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__f) _STLP_FIX_LITERAL_BUG(__l) _STLP_FIX_LITERAL_BUG(__res) 4509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::_M_copy(__f, __l, __res); 4519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 4539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // Erase. 4559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& erase(size_type __pos = 0, size_type __n = npos) { 4569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::erase(__pos, __n); 4579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 4589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator erase(iterator __pos) { 4619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__pos) 4629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return _Base::erase(__pos); 4639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator erase(iterator __first, iterator __last) { 4669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__first) _STLP_FIX_LITERAL_BUG(__last) 4679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return _Base::erase(__first, __last); 4689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // Replace. (Conceptually equivalent 4719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // to erase followed by insert.) 4729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& replace(size_type __pos, size_type __n, const _Self& __s) { 4739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::replace(__pos, __n, __s); 4749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 4759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& replace(size_type __pos1, size_type __n1, const _Self& __s, 4789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type __pos2, size_type __n2) { 4799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::replace(__pos1, __n1, __s, __pos2, __n2); 4809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 4819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& replace(size_type __pos, size_type __n1, 4849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const _CharT* __s, size_type __n2) { 4859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__s) 4869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::replace(__pos, __n1, __s, __n2); 4879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 4889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& replace(size_type __pos, size_type __n1, const _CharT* __s) { 4919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__s) 4929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::replace(__pos, __n1, __s); 4939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 4949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& replace(size_type __pos, size_type __n1, 4979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type __n2, _CharT __c) { 4989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::replace(__pos, __n1, __n2, __c); 4999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 5009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& replace(iterator __first, iterator __last, const _Self& __s) { 5039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__first) _STLP_FIX_LITERAL_BUG(__last) 5049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::replace(__first, __last, __s); 5059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 5069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& replace(iterator __first, iterator __last, 5099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const _CharT* __s, size_type __n) { 5109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__first) _STLP_FIX_LITERAL_BUG(__last) 5119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__s) 5129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::replace(__first, __last, __s, __n); 5139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 5149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& replace(iterator __first, iterator __last, 5179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const _CharT* __s) { 5189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__first) _STLP_FIX_LITERAL_BUG(__last) 5199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__s) 5209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::replace(__first, __last, __s); 5219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 5229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& replace(iterator __first, iterator __last, 5259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type __n, _CharT __c) { 5269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__first) _STLP_FIX_LITERAL_BUG(__last) 5279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::replace(__first, __last, __n, __c); 5289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 5299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Check to see if _InputIter is an integer type. If so, then 5329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // it can't be an iterator. 5339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIter> 5349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& replace(iterator __first, iterator __last, 5359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _InputIter __f, _InputIter __l) { 5369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__first)_STLP_FIX_LITERAL_BUG(__last) 5379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _IsIntegral<_InputIter>::_Ret _Integral; 538e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _M_replace_dispatch(__first, __last, __f, __l, _Integral()); 5399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 541e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_METHOD_SPECIALIZATION) 5429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& replace(iterator __first, iterator __last, 5439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const _CharT* __f, const _CharT* __l) { 5449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__first) _STLP_FIX_LITERAL_BUG(__last) 5459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__f) _STLP_FIX_LITERAL_BUG(__l) 546e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _M_replace(__first, __last, __f, __l, this->_M_inside(__f)); 5479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 5499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 550e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottprivate: // Helper functions for replace. 5519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& _M_replace(iterator __first, iterator __last, 5529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const _CharT* __f, const _CharT* __l, bool __self_ref) { 5539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__first) _STLP_FIX_LITERAL_BUG(__last) 5549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__f) _STLP_FIX_LITERAL_BUG(__l) 5559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Base::_M_replace(__first, __last, __f, __l, __self_ref); 5569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 5579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Integer> 5609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& _M_replace_dispatch(iterator __first, iterator __last, 5619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Integer __n, _Integer __x, const __true_type& /*IsIntegral*/) { 5629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__first) _STLP_FIX_LITERAL_BUG(__last) 5639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return replace(__first, __last, (size_type) __n, (_CharT) __x); 5649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIter> 5679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& _M_replace_dispatch(iterator __first, iterator __last, 5689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _InputIter __f, _InputIter __l, const __false_type& /*IsIntegral*/) { 5699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FIX_LITERAL_BUG(__first) _STLP_FIX_LITERAL_BUG(__last) 570e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott /* We are forced to do a temporary string to avoid the self referencing issue. */ 571e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const _Self __self(__f, __l, this->get_allocator()); 572e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return _M_replace(__first, __last, __self._M_Start(), __self._M_Finish(), false); 5739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // Other modifier member functions. 576e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void swap(_Self& __s) { _Base::swap(__s); } 577e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER) 578e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void _M_swap_workaround(_Self& __x) { swap(__x); } 579e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 5809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // Substring. 5829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self substr(size_type __pos = 0, size_type __n = npos) const 583e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { return _Self(*this, __pos, __n, this->get_allocator()); } 5849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_TEMPLATE_EXPRESSION) && !defined (_STLP_DEBUG) 5869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define _STLP_STRING_SUM_BASE _STLP_NO_MEM_T_STRING_BASE 5879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_string_sum_methods.h> 5889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# undef _STLP_STRING_SUM_BASE 5899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 5909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 5919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#undef _STLP_NO_MEM_T_STRING_BASE 5939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (basic_string) 5959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 5969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# undef basic_string 5979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 5989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE 600