diff options
author | Paolo Carlini <pcarlini@suse.de> | 2005-12-05 16:39:18 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2005-12-05 16:39:18 +0000 |
commit | afe6d70550d31308858263b7847731292bf06260 (patch) | |
tree | 6e38548ab1026c8bb0925c77469e085c09d88288 | |
parent | 53917868b8f482e3c378d7b67f469c768d720206 (diff) | |
download | gcc-afe6d70550d31308858263b7847731292bf06260.zip gcc-afe6d70550d31308858263b7847731292bf06260.tar.gz gcc-afe6d70550d31308858263b7847731292bf06260.tar.bz2 |
sso_string_base.h (__sso_string_base<>::_M_assign): Simplify, avoid pointless reallocations.
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
-rw-r--r-- | libstdc++-v3/ChangeLog | 5 | ||||
-rw-r--r-- | libstdc++-v3/include/ext/sso_string_base.h | 26 |
2 files changed, 18 insertions, 13 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 98ad9ad..12520c1 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -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): diff --git a/libstdc++-v3/include/ext/sso_string_base.h b/libstdc++-v3/include/ext/sso_string_base.h index 0a30765..1b967b9 100644 --- a/libstdc++-v3/include/ext/sso_string_base.h +++ b/libstdc++-v3/include/ext/sso_string_base.h @@ -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); } } |