Commit a484326f by Paolo Carlini Committed by Paolo Carlini

PR libstdc++/28277 (partial: __add_grouping)

2006-10-09  Paolo Carlini  <pcarlini@suse.de>

	PR libstdc++/28277 (partial: __add_grouping)
	* include/bits/locale_facets.tcc (__add_grouping<>(_CharT*, _CharT,
	const char*, size_t, const _CharT*, const _CharT*)): Rewrite in
	non-recursive form.

From-SVN: r117581
parent a98d4769
2006-10-09 Paolo Carlini <pcarlini@suse.de> 2006-10-09 Paolo Carlini <pcarlini@suse.de>
PR libstdc++/28277 (partial: __add_grouping)
* include/bits/locale_facets.tcc (__add_grouping<>(_CharT*, _CharT,
const char*, size_t, const _CharT*, const _CharT*)): Rewrite in
non-recursive form.
2006-10-09 Paolo Carlini <pcarlini@suse.de>
PR libstdc++/28277 (partial: money_put bits) PR libstdc++/28277 (partial: money_put bits)
* include/bits/locale_facets.tcc (money_put<>::_M_insert(iter_type, * include/bits/locale_facets.tcc (money_put<>::_M_insert(iter_type,
ios_base&, char_type, const string_type&)): Avoid __builtin_alloca ios_base&, char_type, const string_type&)): Avoid __builtin_alloca
......
...@@ -2590,19 +2590,33 @@ _GLIBCXX_END_LDBL_NAMESPACE ...@@ -2590,19 +2590,33 @@ _GLIBCXX_END_LDBL_NAMESPACE
const char* __gbeg, size_t __gsize, const char* __gbeg, size_t __gsize,
const _CharT* __first, const _CharT* __last) const _CharT* __first, const _CharT* __last)
{ {
if (__last - __first > *__gbeg size_t __idx = 0;
&& static_cast<signed char>(*__gbeg) > 0) size_t __ctr = 0;
while (__last - __first > __gbeg[__idx]
&& static_cast<signed char>(__gbeg[__idx]) > 0)
{ {
const bool __bump = __gsize != 1; __last -= __gbeg[__idx];
__s = std::__add_grouping(__s, __sep, __gbeg + __bump, __idx < __gsize - 1 ? ++__idx : ++__ctr;
__gsize - __bump, __first,
__last - *__gbeg);
__first = __last - *__gbeg;
*__s++ = __sep;
} }
do
while (__first != __last)
*__s++ = *__first++; *__s++ = *__first++;
while (__first != __last);
while (__ctr--)
{
*__s++ = __sep;
for (char __i = __gbeg[__idx]; __i > 0; --__i)
*__s++ = *__first++;
}
while (__idx--)
{
*__s++ = __sep;
for (char __i = __gbeg[__idx]; __i > 0; --__i)
*__s++ = *__first++;
}
return __s; return __s;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment