From ca6500fcd0812d2b2da8a62d52b3613b4cbab12a Mon Sep 17 00:00:00 2001 From: Alexander Kabaev Date: Sun, 1 Sep 2002 20:39:13 +0000 Subject: Gcc 3.2.1-prerelease libf2c bits from the FSF anoncvs repo gcc-3_2-branch on 1-Sep-2002 00:00:01 EDT. --- contrib/libstdc++/include/bits/basic_string.h | 31 +++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) (limited to 'contrib/libstdc++/include/bits/basic_string.h') diff --git a/contrib/libstdc++/include/bits/basic_string.h b/contrib/libstdc++/include/bits/basic_string.h index e05a1c6ef6143..a9c02ce37089a 100644 --- a/contrib/libstdc++/include/bits/basic_string.h +++ b/contrib/libstdc++/include/bits/basic_string.h @@ -650,8 +650,11 @@ namespace std || less()(_M_data() + __size, __s)) return _M_replace_safe(_M_ibegin() + __pos, _M_ibegin() + __pos + __foldn1, __s, __s + __n2); - else return this->replace(_M_check(__pos), _M_fold(__pos, __n1), - __s, __s + __n2); + // Todo: optimized in-place replace. + else return + _M_replace(_M_ibegin() + __pos, _M_ibegin() + __pos + __foldn1, + __s, __s + __n2, + typename iterator_traits::iterator_category()); } basic_string& @@ -685,6 +688,30 @@ namespace std { return _M_replace(__i1, __i2, __k1, __k2, typename iterator_traits<_InputIterator>::iterator_category()); } + // Specializations for the common case of pointer and iterator: + // useful to avoid the overhead of temporary buffering in _M_replace. + basic_string& + replace(iterator __i1, iterator __i2, _CharT* __k1, _CharT* __k2) + { return this->replace(__i1 - _M_ibegin(), __i2 - __i1, + __k1, __k2 - __k1); } + + basic_string& + replace(iterator __i1, iterator __i2, const _CharT* __k1, const _CharT* __k2) + { return this->replace(__i1 - _M_ibegin(), __i2 - __i1, + __k1, __k2 - __k1); } + + basic_string& + replace(iterator __i1, iterator __i2, iterator __k1, iterator __k2) + { return this->replace(__i1 - _M_ibegin(), __i2 - __i1, + __k1.base(), __k2 - __k1); + } + + basic_string& + replace(iterator __i1, iterator __i2, const_iterator __k1, const_iterator __k2) + { return this->replace(__i1 - _M_ibegin(), __i2 - __i1, + __k1.base(), __k2 - __k1); + } + private: template basic_string& -- cgit v1.3