From 41b8e86c9abcb1dbf93c78a1a8529ade77e39ff5 Mon Sep 17 00:00:00 2001 From: Paolo Carlini Date: Mon, 19 Apr 2004 11:30:20 +0000 Subject: [PATCH] PR libstdc++/15002 (partial) 2004-04-19 Paolo Carlini PR libstdc++/15002 (partial) * include/bits/basic_string.h (_M_replace_aux, _M_replace_safe): Special case __n2 == 1, not calling traits_type::assign/copy. From-SVN: r80847 --- libstdc++-v3/ChangeLog | 6 ++++++ libstdc++-v3/include/bits/basic_string.h | 10 +++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index cbae3127aa5..0654d76f201 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,9 @@ +2004-04-19 Paolo Carlini + + PR libstdc++/15002 (partial) + * include/bits/basic_string.h (_M_replace_aux, _M_replace_safe): + Special case __n2 == 1, not calling traits_type::assign/copy. + 2004-04-17 Benjamin Kosnik * include/bits/stl_bvector.h: Use _M_impl._M_start. diff --git a/libstdc++-v3/include/bits/basic_string.h b/libstdc++-v3/include/bits/basic_string.h index a33cdefdb53..6837e013fbb 100644 --- a/libstdc++-v3/include/bits/basic_string.h +++ b/libstdc++-v3/include/bits/basic_string.h @@ -1342,7 +1342,9 @@ namespace std if (this->max_size() - (this->size() - __n1) < __n2) __throw_length_error(__N("basic_string::_M_replace_aux")); _M_mutate(__pos1, __n1, __n2); - if (__n2) + if (__n2 == 1) + _M_data()[__pos1] = __c; + else if (__n2) traits_type::assign(_M_data() + __pos1, __n2, __c); return *this; } @@ -1352,7 +1354,9 @@ namespace std size_type __n2) { _M_mutate(__pos1, __n1, __n2); - if (__n2) + if (__n2 == 1) + _M_data()[__pos1] = *__s; + else if (__n2) traits_type::copy(_M_data() + __pos1, __s, __n2); return *this; } @@ -1960,7 +1964,7 @@ namespace std * @param rhs Last string. * @return New string with value of @a lhs followed by @a rhs. */ - template + template basic_string<_CharT, _Traits, _Alloc> operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs, const basic_string<_CharT, _Traits, _Alloc>& __rhs) -- 2.30.2