00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #if _GLIBCPP_USE_SHADOW_HEADERS
00038 using _C_legacy::__ctype_toupper;
00039 using _C_legacy::__ctype_tolower;
00040 using _C_legacy::__ctype_b;
00041 #endif
00042
00043 const ctype_base::mask*
00044 ctype<char>::classic_table() throw()
00045 { return __ctype_b; }
00046
00047 #if _GLIBCPP_C_LOCALE_GNU
00048 ctype<char>::ctype(__c_locale __cloc, const mask* __table, bool __del,
00049 size_t __refs)
00050 : __ctype_abstract_base<char>(__refs), _M_del(__table != 0 && __del)
00051 {
00052 _M_c_locale_ctype = _S_clone_c_locale(__cloc);
00053 _M_toupper = _M_c_locale_ctype->__ctype_toupper;
00054 _M_tolower = _M_c_locale_ctype->__ctype_tolower;
00055 _M_table = __table ? __table : _M_c_locale_ctype->__ctype_b;
00056 }
00057 #else
00058 ctype<char>::ctype(__c_locale, const mask* __table, bool __del,
00059 size_t __refs)
00060 : __ctype_abstract_base<char>(__refs), _M_del(__table != 0 && __del),
00061 _M_toupper(__ctype_toupper), _M_tolower(__ctype_tolower),
00062 _M_table(__table ? __table : classic_table())
00063 { _M_c_locale_ctype = _S_c_locale; }
00064 #endif
00065
00066 ctype<char>::ctype(const mask* __table, bool __del, size_t __refs) :
00067 __ctype_abstract_base<char>(__refs), _M_del(__table != 0 && __del),
00068 _M_toupper(__ctype_toupper), _M_tolower(__ctype_tolower),
00069 _M_table(__table ? __table : classic_table())
00070 { _M_c_locale_ctype = _S_c_locale; }
00071
00072 char
00073 ctype<char>::do_toupper(char __c) const
00074 { return _M_toupper[static_cast<unsigned char>(__c)]; }
00075
00076 const char*
00077 ctype<char>::do_toupper(char* __low, const char* __high) const
00078 {
00079 while (__low < __high)
00080 {
00081 *__low = _M_toupper[static_cast<unsigned char>(*__low)];
00082 ++__low;
00083 }
00084 return __high;
00085 }
00086
00087 char
00088 ctype<char>::do_tolower(char __c) const
00089 { return _M_tolower[static_cast<unsigned char>(__c)]; }
00090
00091 const char*
00092 ctype<char>::do_tolower(char* __low, const char* __high) const
00093 {
00094 while (__low < __high)
00095 {
00096 *__low = _M_tolower[static_cast<unsigned char>(*__low)];
00097 ++__low;
00098 }
00099 return __high;
00100 }