diff options
author | Paolo Carlini <pcarlini@unitus.it> | 2003-10-10 19:10:47 +0200 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2003-10-10 17:10:47 +0000 |
commit | 6b61bca48f4d07a471176ab1285ae346d8a8dc6a (patch) | |
tree | 809614ad8ac2d034a844a7aa54550d9e0f67a2e0 /libstdc++-v3 | |
parent | fc45d351334f0e3d8247eda15861d992fa10f7e9 (diff) | |
download | gcc-6b61bca48f4d07a471176ab1285ae346d8a8dc6a.zip gcc-6b61bca48f4d07a471176ab1285ae346d8a8dc6a.tar.gz gcc-6b61bca48f4d07a471176ab1285ae346d8a8dc6a.tar.bz2 |
2003-10-10 Paolo Carlini <pcarlini@unitus.it>
* include/bits/ostream.tcc (operator<<(basic_ostream&, _CharT))
Avoid unnecessarily calling __builtin_alloca and dealing
explicitly with width() smaller than zero.
(operator<<(basic_ostream&, char), operator<<(basic_ostream&,
const _CharT*), operator<<(basic_ostream<_CharT, _Traits>&,
const char*), operator<<(basic_ostream<char, _Traits>&,
const char*), operator<<(basic_ostream, const basic_string&)):
Likewise.
From-SVN: r72302
Diffstat (limited to 'libstdc++-v3')
-rw-r--r-- | libstdc++-v3/ChangeLog | 11 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/ostream.tcc | 63 |
2 files changed, 44 insertions, 30 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 08950d9..865d9be 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,14 @@ +2003-10-10 Paolo Carlini <pcarlini@unitus.it> + + * include/bits/ostream.tcc (operator<<(basic_ostream&, _CharT)) + Avoid unnecessarily calling __builtin_alloca and dealing + explicitly with width() smaller than zero. + (operator<<(basic_ostream&, char), operator<<(basic_ostream&, + const _CharT*), operator<<(basic_ostream<_CharT, _Traits>&, + const char*), operator<<(basic_ostream<char, _Traits>&, + const char*), operator<<(basic_ostream, const basic_string&)): + Likewise. + 2003-10-09 Benjamin Kosnik <bkoz@redhat.com> * config/linker-map.gnu: Make more *_type_info bits visible. diff --git a/libstdc++-v3/include/bits/ostream.tcc b/libstdc++-v3/include/bits/ostream.tcc index 401b58f..fee2f27 100644 --- a/libstdc++-v3/include/bits/ostream.tcc +++ b/libstdc++-v3/include/bits/ostream.tcc @@ -471,17 +471,18 @@ namespace std { try { - const streamsize __w = __out.width() > 0 ? __out.width() : 0; - _CharT* __pads = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * (__w + 1))); - __pads[0] = __c; + const streamsize __w = __out.width(); streamsize __len = 1; + _CharT* __cs = &__c; if (__w > __len) { - __pad<_CharT, _Traits>::_S_pad(__out, __out.fill(), __pads, + __cs = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) + * __w)); + __pad<_CharT, _Traits>::_S_pad(__out, __out.fill(), __cs, &__c, __w, __len, false); __len = __w; } - __out._M_write(__pads, __len); + __out._M_write(__cs, __len); __out.width(0); } catch(...) @@ -507,17 +508,17 @@ namespace std { try { - const streamsize __w = __out.width() > 0 ? __out.width() : 0; - char* __pads = static_cast<char*>(__builtin_alloca(__w + 1)); - __pads[0] = __c; + const streamsize __w = __out.width(); streamsize __len = 1; + char* __cs = &__c; if (__w > __len) { - __pad<char, _Traits>::_S_pad(__out, __out.fill(), __pads, + __cs = static_cast<char*>(__builtin_alloca(__w)); + __pad<char, _Traits>::_S_pad(__out, __out.fill(), __cs, &__c, __w, __len, false); __len = __w; } - __out._M_write(__pads, __len); + __out._M_write(__cs, __len); __out.width(0); } catch(...) @@ -542,14 +543,15 @@ namespace std { try { - const streamsize __w = __out.width() > 0 ? __out.width() : 0; - _CharT* __pads = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * __w)); + const streamsize __w = __out.width(); streamsize __len = static_cast<streamsize>(_Traits::length(__s)); if (__w > __len) { - __pad<_CharT, _Traits>::_S_pad(__out, __out.fill(), __pads, + _CharT* __cs = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) + * __w)); + __pad<_CharT, _Traits>::_S_pad(__out, __out.fill(), __cs, __s, __w, __len, false); - __s = __pads; + __s = __cs; __len = __w; } __out._M_write(__s, __len); @@ -583,22 +585,23 @@ namespace std if (__cerb && __s) { size_t __clen = __traits_type::length(__s); - _CharT* __ws = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * (__clen + 1))); + _CharT* __ws = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) + * __clen)); for (size_t __i = 0; __i < __clen; ++__i) __ws[__i] = __out.widen(__s[__i]); _CharT* __str = __ws; try { + const streamsize __w = __out.width(); streamsize __len = static_cast<streamsize>(__clen); - const streamsize __w = __out.width() > 0 ? __out.width() : 0; - _CharT* __pads = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * __w)); - if (__w > __len) { - __pad<_CharT, _Traits>::_S_pad(__out, __out.fill(), __pads, + _CharT* __cs = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) + * __w)); + __pad<_CharT, _Traits>::_S_pad(__out, __out.fill(), __cs, __ws, __w, __len, false); - __str = __pads; + __str = __cs; __len = __w; } __out._M_write(__str, __len); @@ -629,15 +632,14 @@ namespace std { try { - const streamsize __w = __out.width() > 0 ? __out.width() : 0; - char* __pads = static_cast<char*>(__builtin_alloca(__w)); + const streamsize __w = __out.width(); streamsize __len = static_cast<streamsize>(_Traits::length(__s)); - if (__w > __len) { - __pad<char, _Traits>::_S_pad(__out, __out.fill(), __pads, + char* __cs = static_cast<char*>(__builtin_alloca(__w)); + __pad<char, _Traits>::_S_pad(__out, __out.fill(), __cs, __s, __w, __len, false); - __s = __pads; + __s = __cs; __len = __w; } __out._M_write(__s, __len); @@ -667,18 +669,19 @@ namespace std typename __ostream_type::sentry __cerb(__out); if (__cerb) { - const _CharT* __s = __str.data(); - const streamsize __w = __out.width() > 0 ? __out.width() : 0; - _CharT* __pads = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) * __w)); + const streamsize __w = __out.width(); streamsize __len = static_cast<streamsize>(__str.size()); + const _CharT* __s = __str.data(); #ifdef _GLIBCXX_RESOLVE_LIB_DEFECTS // 25. String operator<< uses width() value wrong #endif if (__w > __len) { - __pad<_CharT, _Traits>::_S_pad(__out, __out.fill(), __pads, __s, + _CharT* __cs = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT) + * __w)); + __pad<_CharT, _Traits>::_S_pad(__out, __out.fill(), __cs, __s, __w, __len, false); - __s = __pads; + __s = __cs; __len = __w; } __out._M_write(__s, __len); |