]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
sso_string_base.h (__sso_string_base<>::_M_assign): Simplify, avoid pointless realloc...
authorPaolo Carlini <pcarlini@suse.de>
Mon, 5 Dec 2005 16:39:18 +0000 (16:39 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Mon, 5 Dec 2005 16:39:18 +0000 (16:39 +0000)
2005-12-05  Paolo Carlini  <pcarlini@suse.de>

* include/ext/sso_string_base.h (__sso_string_base<>::_M_assign):
Simplify, avoid pointless reallocations.

From-SVN: r108063

libstdc++-v3/ChangeLog
libstdc++-v3/include/ext/sso_string_base.h

index 98ad9adf2930e4a3f5878167bd5512e70ccdaad2..12520c1bf8f42aa20a3144a433a6bff4c50fb82f 100644 (file)
@@ -1,3 +1,8 @@
+2005-12-05  Paolo Carlini  <pcarlini@suse.de>
+
+       * include/ext/sso_string_base.h (__sso_string_base<>::_M_assign):
+       Simplify, avoid pointless reallocations.
+
 2005-12-04  Paolo Carlini  <pcarlini@suse.de>
 
        * include/ext/sso_string_base.h (__sso_string_base<>::_M_reserve):
index 0a307657d462a2aa7cad1998b0c0151fe3f18e18..1b967b98283733b87cfb48ebccc71d74047fb822 100644 (file)
@@ -455,22 +455,22 @@ namespace __gnu_cxx
     {
       if (this != &__rcs)
        {
-         size_type __size = __rcs._M_length();
+         const size_type __rsize = __rcs._M_length();
+         const size_type __capacity = _M_capacity();
 
-         _CharT* __tmp = _M_local_data;
-         if (__size > size_type(_S_local_capacity))
-           __tmp = _M_create(__size, size_type(0));
-
-         _M_dispose();
-         _M_data(__tmp);
-
-         if (__size)
-           _S_copy(_M_data(), __rcs._M_data(), __size);
+         if (__rsize > __capacity)
+           {
+             size_type __new_capacity = __rsize;
+             _CharT* __tmp = _M_create(__new_capacity, __capacity);
+             _M_dispose();
+             _M_data(__tmp);
+             _M_capacity(__new_capacity);
+           }
 
-         if (!_M_is_local())
-           _M_capacity(__size);
+         if (__rsize)
+           _S_copy(_M_data(), __rcs._M_data(), __rsize);
 
-         _M_set_length(__size);
+         _M_set_length(__rsize);
        }
     }