You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stdcxx.apache.org by se...@apache.org on 2007/09/12 00:00:36 UTC
svn commit: r574708 - /incubator/stdcxx/trunk/include/string
Author: sebor
Date: Tue Sep 11 15:00:36 2007
New Revision: 574708
URL: http://svn.apache.org/viewvc?rev=574708&view=rev
Log:
2007-09-07 Mark Brown <mb...@inbox.com>
STDCXX-493
* string (append): Replaced calls to replace() with calls to append()
to improve performance.
Modified:
incubator/stdcxx/trunk/include/string
Modified: incubator/stdcxx/trunk/include/string
URL: http://svn.apache.org/viewvc/incubator/stdcxx/trunk/include/string?rev=574708&r1=574707&r2=574708&view=diff
==============================================================================
--- incubator/stdcxx/trunk/include/string (original)
+++ incubator/stdcxx/trunk/include/string Tue Sep 11 15:00:36 2007
@@ -294,14 +294,14 @@
basic_string& append (const basic_string&, size_type, size_type);
- basic_string& append (const basic_string&);
-
- basic_string& append (const_pointer __s, size_type __n) {
- return replace (size (), size_type (), __s, __n);
+ basic_string& append (const basic_string &__str) {
+ return append (__str.data (), __str.size ());
}
+ basic_string& append (const_pointer, size_type);
+
basic_string& append (const_pointer __s) {
- return replace (size (), size_type (), __s);
+ return append (__s, traits_type::length (__s));
}
#ifndef _RWSTD_NO_MEMBER_TEMPLATES
@@ -1194,16 +1194,17 @@
template <class _CharT, class _Traits, class _Allocator>
inline basic_string<_CharT, _Traits, _Allocator>&
basic_string<_CharT, _Traits, _Allocator>::
-append (const basic_string &__str)
+append (const_pointer __s, size_type __n)
{
- const size_type __size = size () + __str.size ();
+ const size_type __newsize = size () + __n;
- if ( capacity () < __size
+ if ( capacity () <= __newsize
|| size_type (1) < size_type (_C_pref ()->_C_get_ref ()))
- return append (__str, size_type (), __str.size ());
+ return replace (size (), size_type (), __s, __n);
- traits_type::copy (_C_data + size (), __str.data (), __str.size () + 1);
- _C_pref ()->_C_size._C_size = __size;
+ traits_type::copy (_C_data + size (), __s, __n);
+ traits_type::assign (_C_data [__newsize], value_type ());
+ _C_pref ()->_C_size._C_size = __newsize;
return *this;
}