⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 locale_facets.h

📁 gcc-you can use this code to learn something about gcc, and inquire further into linux,
💻 H
📖 第 1 页 / 共 4 页
字号:
// Locale support -*- C++ -*-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003// Free Software Foundation, Inc.//// This file is part of the GNU ISO C++ Library.  This library is free// software; you can redistribute it and/or modify it under the// terms of the GNU General Public License as published by the// Free Software Foundation; either version 2, or (at your option)// any later version.// This library is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the// GNU General Public License for more details.// You should have received a copy of the GNU General Public License along// with this library; see the file COPYING.  If not, write to the Free// Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,// USA.// As a special exception, you may use this file as part of a free software// library without restriction.  Specifically, if other files instantiate// templates or use macros or inline functions from this file, or you compile// this file and link it with other files to produce an executable, this// file does not by itself cause the resulting executable to be covered by// the GNU General Public License.  This exception does not however// invalidate any other reasons why the executable file might be covered by// the GNU General Public License.//// ISO C++ 14882: 22.1  Locales///** @file locale_facets.h *  This is an internal header file, included by other library headers. *  You should not attempt to use it directly. */#ifndef _CPP_BITS_LOCFACETS_H#define _CPP_BITS_LOCFACETS_H	1#pragma GCC system_header#include <ctime>	// For struct tm#include <cwctype>	// For wctype_t#include <iosfwd>#include <bits/ios_base.h>  // For ios_base, ios_base::iostate#include <streambuf>namespace std{  // NB: Don't instantiate required wchar_t facets if no wchar_t support.#ifdef _GLIBCPP_USE_WCHAR_T# define  _GLIBCPP_NUM_FACETS 28#else# define  _GLIBCPP_NUM_FACETS 14#endif  // Convert string to numeric value of type _Tv and store results.    // NB: This is specialized for all required types, there is no  // generic definition.  template<typename _Tv>    void    __convert_to_v(const char* __in, _Tv& __out, ios_base::iostate& __err, 		   const __c_locale& __cloc, int __base = 10);  // Explicit specializations for required types.  template<>    void    __convert_to_v(const char*, long&, ios_base::iostate&, 		   const __c_locale&, int);  template<>    void    __convert_to_v(const char*, unsigned long&, ios_base::iostate&, 		   const __c_locale&, int);#ifdef _GLIBCPP_USE_LONG_LONG  template<>    void    __convert_to_v(const char*, long long&, ios_base::iostate&, 		   const __c_locale&, int);  template<>    void    __convert_to_v(const char*, unsigned long long&, ios_base::iostate&, 		   const __c_locale&, int);#endif  template<>    void    __convert_to_v(const char*, float&, ios_base::iostate&, 		   const __c_locale&, int);  template<>    void    __convert_to_v(const char*, double&, ios_base::iostate&, 		   const __c_locale&, int); template<>    void    __convert_to_v(const char*, long double&, ios_base::iostate&, 		   const __c_locale&, int);  // NB: __pad is a struct, rather than a function, so it can be  // partially-specialized.  template<typename _CharT, typename _Traits>    struct __pad    {      static void      _S_pad(ios_base& __io, _CharT __fill, _CharT* __news, 	     const _CharT* __olds, const streamsize __newlen, 	     const streamsize __oldlen, const bool __num);    };  // Used by both numeric and monetary facets.  // Check to make sure that the __grouping_tmp string constructed in  // money_get or num_get matches the canonical grouping for a given  // locale.  // __grouping_tmp is parsed L to R  // 1,222,444 == __grouping_tmp of "\1\3\3"  // __grouping is parsed R to L  // 1,222,444 == __grouping of "\3" == "\3\3\3"  template<typename _CharT>    bool    __verify_grouping(const basic_string<_CharT>& __grouping, 		      basic_string<_CharT>& __grouping_tmp);  // Used by both numeric and monetary facets.  // Inserts "group separator" characters into an array of characters.  // It's recursive, one iteration per group.  It moves the characters  // in the buffer this way: "xxxx12345" -> "12,345xxx".  Call this  // only with __gbeg != __gend.  template<typename _CharT>    _CharT*    __add_grouping(_CharT* __s, _CharT __sep,  		   const char* __gbeg, const char* __gend, 		   const _CharT* __first, const _CharT* __last);  // This template permits specializing facet output code for  // ostreambuf_iterator.  For ostreambuf_iterator, sputn is  // significantly more efficient than incrementing iterators.  template<typename _CharT>    inline    ostreambuf_iterator<_CharT>    __write(ostreambuf_iterator<_CharT> __s, const _CharT* __ws, int __len)    {      __s._M_put(__ws, __len);      return __s;    }  // This is the unspecialized form of the template.  template<typename _CharT, typename _OutIter>    inline    _OutIter    __write(_OutIter __s, const _CharT* __ws, int __len)    {      for (int __j = 0; __j < __len; __j++, ++__s)	*__s = __ws[__j];      return __s;    }  // 22.2.1.1  Template class ctype  // Include host and configuration specific ctype enums for ctype_base.  #include <bits/ctype_base.h>  // Common base for ctype<_CharT>.    template<typename _CharT>    class __ctype_abstract_base : public locale::facet, public ctype_base    {    public:      // Types:      typedef _CharT char_type;      bool       is(mask __m, char_type __c) const      { return this->do_is(__m, __c); }      const char_type*      is(const char_type *__lo, const char_type *__hi, mask *__vec) const         { return this->do_is(__lo, __hi, __vec); }      const char_type*      scan_is(mask __m, const char_type* __lo, const char_type* __hi) const      { return this->do_scan_is(__m, __lo, __hi); }      const char_type*      scan_not(mask __m, const char_type* __lo, const char_type* __hi) const      { return this->do_scan_not(__m, __lo, __hi); }      char_type       toupper(char_type __c) const      { return this->do_toupper(__c); }      const char_type*      toupper(char_type *__lo, const char_type* __hi) const      { return this->do_toupper(__lo, __hi); }      char_type       tolower(char_type __c) const      { return this->do_tolower(__c); }      const char_type*      tolower(char_type* __lo, const char_type* __hi) const      { return this->do_tolower(__lo, __hi); }      char_type       widen(char __c) const      { return this->do_widen(__c); }      const char*      widen(const char* __lo, const char* __hi, char_type* __to) const      { return this->do_widen(__lo, __hi, __to); }      char       narrow(char_type __c, char __dfault) const      { return this->do_narrow(__c, __dfault); }      const char_type*      narrow(const char_type* __lo, const char_type* __hi,	      char __dfault, char *__to) const      { return this->do_narrow(__lo, __hi, __dfault, __to); }    protected:      explicit       __ctype_abstract_base(size_t __refs = 0): locale::facet(__refs) { }      virtual       ~__ctype_abstract_base() { }            virtual bool       do_is(mask __m, char_type __c) const = 0;      virtual const char_type*      do_is(const char_type* __lo, const char_type* __hi, 	    mask* __vec) const = 0;      virtual const char_type*      do_scan_is(mask __m, const char_type* __lo,		 const char_type* __hi) const = 0;      virtual const char_type*      do_scan_not(mask __m, const char_type* __lo, 		  const char_type* __hi) const = 0;      virtual char_type       do_toupper(char_type) const = 0;      virtual const char_type*      do_toupper(char_type* __lo, const char_type* __hi) const = 0;      virtual char_type       do_tolower(char_type) const = 0;      virtual const char_type*      do_tolower(char_type* __lo, const char_type* __hi) const = 0;            virtual char_type       do_widen(char) const = 0;      virtual const char*      do_widen(const char* __lo, const char* __hi, 	       char_type* __dest) const = 0;      virtual char       do_narrow(char_type, char __dfault) const = 0;      virtual const char_type*      do_narrow(const char_type* __lo, const char_type* __hi,		 char __dfault, char* __dest) const = 0;    };  // NB: Generic, mostly useless implementation.  template<typename _CharT>    class ctype : public __ctype_abstract_base<_CharT>    {    public:      // Types:      typedef _CharT 		  	char_type;      typedef typename ctype::mask 	mask;      static locale::id 	       	id;      explicit       ctype(size_t __refs = 0) : __ctype_abstract_base<_CharT>(__refs) { }   protected:      virtual       ~ctype();      virtual bool       do_is(mask __m, char_type __c) const;      virtual const char_type*      do_is(const char_type* __lo, const char_type* __hi, mask* __vec) const;      virtual const char_type*      do_scan_is(mask __m, const char_type* __lo, const char_type* __hi) const;      virtual const char_type*      do_scan_not(mask __m, const char_type* __lo,		  const char_type* __hi) const;      virtual char_type       do_toupper(char_type __c) const;      virtual const char_type*      do_toupper(char_type* __lo, const char_type* __hi) const;      virtual char_type       do_tolower(char_type __c) const;      virtual const char_type*      do_tolower(char_type* __lo, const char_type* __hi) const;      virtual char_type       do_widen(char __c) const;      virtual const char*      do_widen(const char* __lo, const char* __hi, char_type* __dest) const;      virtual char       do_narrow(char_type, char __dfault) const;      virtual const char_type*      do_narrow(const char_type* __lo, const char_type* __hi,		char __dfault, char* __dest) const;    };  template<typename _CharT>    locale::id ctype<_CharT>::id;  // 22.2.1.3  ctype<char> specialization.  template<>    class ctype<char> : public __ctype_abstract_base<char>    {    public:      // Types:      typedef char 	       	char_type;    protected:      // Data Members:      __c_locale		_M_c_locale_ctype;      bool 		       	_M_del;      __to_type 	       	_M_toupper;      __to_type  	       	_M_tolower;      const mask*              	_M_table;          public:      static locale::id        id;      static const size_t      table_size = 1 + static_cast<unsigned char>(-1);      explicit       ctype(const mask* __table = 0, bool __del = false, size_t __refs = 0);      explicit       ctype(__c_locale __cloc, const mask* __table = 0, bool __del = false, 	    size_t __refs = 0);      inline bool       is(mask __m, char __c) const;       inline const char*      is(const char* __lo, const char* __hi, mask* __vec) const;       inline const char*      scan_is(mask __m, const char* __lo, const char* __hi) const;      inline const char*      scan_not(mask __m, const char* __lo, const char* __hi) const;         protected:      const mask*       table() const throw()      { return _M_table; }      static const mask*       classic_table() throw();      virtual       ~ctype();      virtual bool       do_is(mask __m, char_type __c) const;      virtual const char_type*      do_is(const char_type* __lo, const char_type* __hi, mask* __vec) const;      virtual const char_type*      do_scan_is(mask __m, const char_type* __lo, const char_type* __hi) const;      virtual const char_type*      do_scan_not(mask __m, const char_type* __lo, 		  const char_type* __hi) const;      virtual char_type       do_toupper(char_type) const;      virtual const char_type*      do_toupper(char_type* __lo, const char_type* __hi) const;      virtual char_type       do_tolower(char_type) const;      virtual const char_type*      do_tolower(char_type* __lo, const char_type* __hi) const;            virtual char_type       do_widen(char) const;      virtual const char*      do_widen(const char* __lo, const char* __hi, char_type* __dest) const;      virtual char       do_narrow(char_type, char __dfault) const;      virtual const char_type*      do_narrow(const char_type* __lo, const char_type* __hi,		char __dfault, char* __dest) const;    };   template<>    const ctype<char>&    use_facet<ctype<char> >(const locale& __loc);#ifdef _GLIBCPP_USE_WCHAR_T  // 22.2.1.3  ctype<wchar_t> specialization  template<>    class ctype<wchar_t> : public __ctype_abstract_base<wchar_t>    {    public:      // Types:      typedef wchar_t 	       	char_type;      typedef wctype_t	       	__wmask_type;    protected:      __c_locale		_M_c_locale_ctype;    public:      // Data Members:      static locale::id        	id;      explicit       ctype(size_t __refs = 0);      explicit       ctype(__c_locale __cloc, size_t __refs = 0);    protected:      __wmask_type      _M_convert_to_wmask(const mask __m) const;      virtual       ~ctype();      virtual bool       do_is(mask __m, char_type __c) const;      virtual const char_type*      do_is(const char_type* __lo, const char_type* __hi, mask* __vec) const;      virtual const char_type*      do_scan_is(mask __m, const char_type* __lo, const char_type* __hi) const;      virtual const char_type*      do_scan_not(mask __m, const char_type* __lo, 		  const char_type* __hi) const;      virtual char_type       do_toupper(char_type) const;      virtual const char_type*      do_toupper(char_type* __lo, const char_type* __hi) const;      virtual char_type       do_tolower(char_type) const;      virtual const char_type*      do_tolower(char_type* __lo, const char_type* __hi) const;            virtual char_type       do_widen(char) const;      virtual const char*      do_widen(const char* __lo, const char* __hi, char_type* __dest) const;      virtual char       do_narrow(char_type, char __dfault) const;      virtual const char_type*      do_narrow(const char_type* __lo, const char_type* __hi,		char __dfault, char* __dest) const;    };  template<>    const ctype<wchar_t>&    use_facet<ctype<wchar_t> >(const locale& __loc);#endif //_GLIBCPP_USE_WCHAR_T  // Include host and configuration specific ctype inlines.  #include <bits/ctype_inline.h>  // 22.2.1.2  Template class ctype_byname  template<typename _CharT>    class ctype_byname : public ctype<_CharT>    {    public:      typedef _CharT 		char_type;      explicit       ctype_byname(const char* __s, size_t __refs = 0);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -