const ctype_base::mask*
ctype<char>::classic_table() throw()
{
const ctype_base::mask* __ret;
char* __old = strdup(setlocale(LC_CTYPE, NULL));
setlocale(LC_CTYPE, "C");
__ret = *__ctype_b_loc();
setlocale(LC_CTYPE, __old);
free(__old);
return __ret;
}
ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
size_t __refs)
: facet(__refs), _M_del(__table != 0 && __del)
{
char* __old=strdup(setlocale(LC_CTYPE, NULL));
setlocale(LC_CTYPE, "C");
_M_toupper = *__ctype_toupper_loc();
_M_tolower = *__ctype_tolower_loc();
_M_table = __table ? __table : *__ctype_b_loc();
setlocale(LC_CTYPE, __old);
free(__old);
_M_c_locale_ctype = _S_get_c_locale();
}
ctype<char>::ctype(const mask* __table, bool __del, size_t __refs)
: facet(__refs), _M_del(__table != 0 && __del)
{
char* __old=strdup(setlocale(LC_CTYPE, NULL));
setlocale(LC_CTYPE, "C");
_M_toupper = *__ctype_toupper_loc();
_M_tolower = *__ctype_tolower_loc();
_M_table = __table ? __table : *__ctype_b_loc();
setlocale(LC_CTYPE, __old);
free(__old);
_M_c_locale_ctype = _S_get_c_locale();
}
char
ctype<char>::do_toupper(char __c) const
{ return _M_toupper[static_cast<unsigned char>(__c)]; }
const char*
ctype<char>::do_toupper(char* __low, const char* __high) const
{
while (__low < __high)
{
*__low = _M_toupper[static_cast<unsigned char>(*__low)];
++__low;
}
return __high;
}
char
ctype<char>::do_tolower(char __c) const
{ return _M_tolower[static_cast<unsigned char>(__c)]; }
const char*
ctype<char>::do_tolower(char* __low, const char* __high) const
{
while (__low < __high)
{
*__low = _M_tolower[static_cast<unsigned char>(*__low)];
++__low;
}
return __high;
}