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   }