summaryrefslogtreecommitdiff
path: root/libstdc++-v3/include/bits
diff options
context:
space:
mode:
authorPaolo Carlini <pcarlini@suse.de>2006-10-09 10:49:50 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2006-10-09 10:49:50 +0000
commitc9a5bd54213b158bab770cdcef8fc335d8eb1efb (patch)
treec5b1013bc798a6d0ab383e8cfb690328c3f30e08 /libstdc++-v3/include/bits
parenta145e9b64fcc52b1c5274f92140c2571d0ced500 (diff)
downloadgcc-c9a5bd54213b158bab770cdcef8fc335d8eb1efb.tar.gz
PR libstdc++/28277 (partial: money_put bits)
2006-10-09 Paolo Carlini <pcarlini@suse.de> PR libstdc++/28277 (partial: money_put bits) * include/bits/locale_facets.tcc (money_put<>::_M_insert(iter_type, ios_base&, char_type, const string_type&)): Avoid __builtin_alloca with no limit, do the work in place. * include/bits/locale_facets.tcc (money_put<>::do_put(iter_type, bool, ios_base&, char_type, long double)): Avoid unnecessary __builtin_alloca, do the work in place. From-SVN: r117571
Diffstat (limited to 'libstdc++-v3/include/bits')
-rw-r--r--libstdc++-v3/include/bits/locale_facets.tcc22
1 files changed, 8 insertions, 14 deletions
diff --git a/libstdc++-v3/include/bits/locale_facets.tcc b/libstdc++-v3/include/bits/locale_facets.tcc
index 789df493c5c..43051a1a71a 100644
--- a/libstdc++-v3/include/bits/locale_facets.tcc
+++ b/libstdc++-v3/include/bits/locale_facets.tcc
@@ -1640,22 +1640,20 @@ _GLIBCXX_BEGIN_LDBL_NAMESPACE
// Add thousands separators to non-decimal digits, per
// grouping rules.
- int __paddec = __len - __lc->_M_frac_digits;
+ long __paddec = __len - __lc->_M_frac_digits;
if (__paddec > 0)
{
if (__lc->_M_frac_digits < 0)
__paddec = __len;
if (__lc->_M_grouping_size)
{
- _CharT* __ws =
- static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
- * 2 * __len));
- _CharT* __ws_end =
- std::__add_grouping(__ws, __lc->_M_thousands_sep,
+ __value.assign(2 * __paddec, char_type());
+ _CharT* __vend =
+ std::__add_grouping(&__value[0], __lc->_M_thousands_sep,
__lc->_M_grouping,
__lc->_M_grouping_size,
__beg, __beg + __paddec);
- __value.assign(__ws, __ws_end - __ws);
+ __value.erase(__vend - &__value[0]);
}
else
__value.assign(__beg, __paddec);
@@ -1755,9 +1753,7 @@ _GLIBCXX_BEGIN_LDBL_NAMESPACE
money_put<_CharT, _OutIter>::
__do_put(iter_type __s, bool __intl, ios_base& __io, char_type __fill,
double __units) const
- {
- return this->do_put(__s, __intl, __io, __fill, (long double) __units);
- }
+ { return this->do_put(__s, __intl, __io, __fill, (long double) __units); }
#endif
template<typename _CharT, typename _OutIter>
@@ -1791,10 +1787,8 @@ _GLIBCXX_BEGIN_LDBL_NAMESPACE
int __len = std::__convert_from_v(_S_get_c_locale(), __cs, 0, "%.*Lf",
0, __units);
#endif
- _CharT* __ws = static_cast<_CharT*>(__builtin_alloca(sizeof(_CharT)
- * __cs_size));
- __ctype.widen(__cs, __cs + __len, __ws);
- const string_type __digits(__ws, __len);
+ string_type __digits(__len, char_type());
+ __ctype.widen(__cs, __cs + __len, &__digits[0]);
return __intl ? _M_insert<true>(__s, __io, __fill, __digits)
: _M_insert<false>(__s, __io, __fill, __digits);
}