[RFC] collate_members_wchar_t.cc
Paolo Carlini
pcarlini@unitus.it
Sat Mar 9 12:48:00 GMT 2002
Ulrich Drepper wrote:
> This is definitely needed. The C++ standard indeed requires
> normalization of the return value for do_compare. ISO C does not (with
> good reasons) for strcoll and wcscoll. But the conditionals are kind of
> bad. I'd suggest
>
> template<>
> int
> collate<wchar_t>::_M_compare_helper(const wchar_t* __one,
> const wchar_t* __two) const
> {
> int __cmp = wcscoll(__one, __two);
> return (__cmp >> (8 * sizeof (int) - 2)) | (__cmp != 0);
> }
>
> Compiled for the right platform it won't require any jumps. Modern gcc
> versions will optimize your code pretty well but it's not as good as
> this code.
>
> You have to use the same sequence for the strcoll call.
Thanks. I will implement this.
> > would fix only the assert at line 129, /not/ that at 107, where i1 ==
> 20 (vs i1
> > == -1 for the corresponding char test).
>
> On what system do you run this? I get -1 for the C equivalent
>
> wcscoll (L"Ãuglein", L"Augment")
>
> It might well be the case that you're stumbling accross a problem with
> the libc code.
Well, I'm running on i686-pc-linux-gnu, linux2.4.16, and a stock glibc2.2.5
built with gcc2.95.3+patches.
Are there known bugs in this setup for the stock glibc2.2.5 (and the full set of
locales installed with the usual `make localedata/install-locales') ??
Ciao, Paolo.
More information about the Libstdc++
mailing list