collate_byname<char>::string_type collate_byname<char>::do_transform(const char* low, const char* high) const { size_t n = _Locale_strxfrm(_M_collate, NULL, 0, low, high - low); // NOT PORTABLE. What we're doing relies on internal details of the // string implementation. (Contiguity of string elements and presence // of trailing zero.) string_type buf(n, 0); _Locale_strxfrm(_M_collate, &(*buf.begin()), n + 1, low, high - low); return buf; }
collate_byname<char>::string_type collate_byname<char>::do_transform(const char* low, const char* high) const { size_t n = _Locale_strxfrm(_M_collate, NULL, 0, low, high - low); __vector__<char, allocator<char> > buf(n); _Locale_strxfrm(_M_collate, &buf.front(), n, low, high - low); char& __c1 = *(buf.begin()); char& __c2 = (n == (size_t)-1) ? *(buf.begin() + (high-low-1)) : *(buf.begin() + n); // char& __c2 = *(buf.begin() + n); return string_type( &__c1, &__c2 ); }