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

📄 locale_facets.h

📁 openRisc2000编译链接器等,用于i386 cygwin
💻 H
📖 第 1 页 / 共 5 页
字号:
// Locale support -*- C++ -*-// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005// 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 _LOCALE_FACETS_H#define _LOCALE_FACETS_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 _GLIBCXX_USE_WCHAR_T# define  _GLIBCXX_NUM_FACETS 28#else# define  _GLIBCXX_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);  // Explicit specializations for required types.  template<>    void    __convert_to_v(const char*, float&, ios_base::iostate&,		   const __c_locale&);  template<>    void    __convert_to_v(const char*, double&, ios_base::iostate&,		   const __c_locale&);  template<>    void    __convert_to_v(const char*, long double&, ios_base::iostate&,		   const __c_locale&);  // 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.  // 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 __glen != 0.  template<typename _CharT>    _CharT*    __add_grouping(_CharT* __s, _CharT __sep,		   const char* __gbeg, size_t __gsize,		   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>.  /**   *  @brief  Common base for ctype facet   *   *  This template class provides implementations of the public functions   *  that forward to the protected virtual functions.   *   *  This template also provides abtract stubs for the protected virtual   *  functions.  */  template<typename _CharT>    class __ctype_abstract_base : public locale::facet, public ctype_base    {    public:      // Types:      /// Typedef for the template parameter      typedef _CharT char_type;      /**       *  @brief  Test char_type classification.       *       *  This function finds a mask M for @a c and compares it to mask @a m.       *  It does so by returning the value of ctype<char_type>::do_is().       *       *  @param c  The char_type to compare the mask of.       *  @param m  The mask to compare against.       *  @return  (M & m) != 0.      */      bool      is(mask __m, char_type __c) const      { return this->do_is(__m, __c); }      /**       *  @brief  Return a mask array.       *       *  This function finds the mask for each char_type in the range [lo,hi)       *  and successively writes it to vec.  vec must have as many elements       *  as the char array.  It does so by returning the value of       *  ctype<char_type>::do_is().       *       *  @param lo  Pointer to start of range.       *  @param hi  Pointer to end of range.       *  @param vec  Pointer to an array of mask storage.       *  @return  @a hi.      */      const char_type*      is(const char_type *__lo, const char_type *__hi, mask *__vec) const      { return this->do_is(__lo, __hi, __vec); }      /**       *  @brief  Find char_type matching a mask       *       *  This function searches for and returns the first char_type c in       *  [lo,hi) for which is(m,c) is true.  It does so by returning       *  ctype<char_type>::do_scan_is().       *       *  @param m  The mask to compare against.       *  @param lo  Pointer to start of range.       *  @param hi  Pointer to end of range.       *  @return  Pointer to matching char_type if found, else @a hi.      */      const char_type*      scan_is(mask __m, const char_type* __lo, const char_type* __hi) const      { return this->do_scan_is(__m, __lo, __hi); }      /**       *  @brief  Find char_type not matching a mask       *       *  This function searches for and returns the first char_type c in       *  [lo,hi) for which is(m,c) is false.  It does so by returning       *  ctype<char_type>::do_scan_not().       *       *  @param m  The mask to compare against.       *  @param lo  Pointer to first char in range.       *  @param hi  Pointer to end of range.       *  @return  Pointer to non-matching char if found, else @a 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); }      /**       *  @brief  Convert to uppercase.       *       *  This function converts the argument to uppercase if possible.       *  If not possible (for example, '2'), returns the argument.  It does       *  so by returning ctype<char_type>::do_toupper().       *       *  @param c  The char_type to convert.       *  @return  The uppercase char_type if convertible, else @a c.      */      char_type      toupper(char_type __c) const      { return this->do_toupper(__c); }      /**       *  @brief  Convert array to uppercase.       *       *  This function converts each char_type in the range [lo,hi) to       *  uppercase if possible.  Other elements remain untouched.  It does so       *  by returning ctype<char_type>:: do_toupper(lo, hi).       *       *  @param lo  Pointer to start of range.       *  @param hi  Pointer to end of range.       *  @return  @a hi.      */      const char_type*      toupper(char_type *__lo, const char_type* __hi) const      { return this->do_toupper(__lo, __hi); }      /**       *  @brief  Convert to lowercase.       *       *  This function converts the argument to lowercase if possible.  If       *  not possible (for example, '2'), returns the argument.  It does so       *  by returning ctype<char_type>::do_tolower(c).       *       *  @param c  The char_type to convert.       *  @return  The lowercase char_type if convertible, else @a c.      */      char_type      tolower(char_type __c) const      { return this->do_tolower(__c); }      /**       *  @brief  Convert array to lowercase.       *       *  This function converts each char_type in the range [lo,hi) to       *  lowercase if possible.  Other elements remain untouched.  It does so       *  by returning ctype<char_type>:: do_tolower(lo, hi).       *       *  @param lo  Pointer to start of range.       *  @param hi  Pointer to end of range.       *  @return  @a hi.      */      const char_type*      tolower(char_type* __lo, const char_type* __hi) const      { return this->do_tolower(__lo, __hi); }      /**       *  @brief  Widen char to char_type       *       *  This function converts the char argument to char_type using the       *  simplest reasonable transformation.  It does so by returning       *  ctype<char_type>::do_widen(c).       *       *  Note: this is not what you want for codepage conversions.  See       *  codecvt for that.       *       *  @param c  The char to convert.       *  @return  The converted char_type.      */      char_type      widen(char __c) const      { return this->do_widen(__c); }      /**       *  @brief  Widen array to char_type       *       *  This function converts each char in the input to char_type using the       *  simplest reasonable transformation.  It does so by returning       *  ctype<char_type>::do_widen(c).       *       *  Note: this is not what you want for codepage conversions.  See       *  codecvt for that.       *       *  @param lo  Pointer to start of range.       *  @param hi  Pointer to end of range.       *  @param to  Pointer to the destination array.       *  @return  @a hi.      */      const char*      widen(const char* __lo, const char* __hi, char_type* __to) const      { return this->do_widen(__lo, __hi, __to); }      /**       *  @brief  Narrow char_type to char       *       *  This function converts the char_type to char using the simplest       *  reasonable transformation.  If the conversion fails, dfault is       *  returned instead.  It does so by returning       *  ctype<char_type>::do_narrow(c).       *       *  Note: this is not what you want for codepage conversions.  See       *  codecvt for that.       *       *  @param c  The char_type to convert.       *  @param dfault  Char to return if conversion fails.       *  @return  The converted char.      */      char      narrow(char_type __c, char __dfault) const      { return this->do_narrow(__c, __dfault); }      /**       *  @brief  Narrow array to char array       *       *  This function converts each char_type in the input to char using the       *  simplest reasonable transformation and writes the results to the       *  destination array.  For any char_type in the input that cannot be       *  converted, @a dfault is used instead.  It does so by returning       *  ctype<char_type>::do_narrow(lo, hi, dfault, to).       *       *  Note: this is not what you want for codepage conversions.  See       *  codecvt for that.       *       *  @param lo  Pointer to start of range.       *  @param hi  Pointer to end of range.       *  @param dfault  Char to use if conversion fails.       *  @param to  Pointer to the destination array.       *  @return  @a hi.      */      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): facet(__refs) { }      virtual      ~__ctype_abstract_base() { }      /**       *  @brief  Test char_type classification.       *       *  This function finds a mask M for @a c and compares it to mask @a m.       *       *  do_is() is a hook for a derived facet to change the behavior of       *  classifying.  do_is() must always return the same result for the       *  same input.       *       *  @param c  The char_type to find the mask of.       *  @param m  The mask to compare against.       *  @return  (M & m) != 0.      */      virtual bool      do_is(mask __m, char_type __c) const = 0;      /**       *  @brief  Return a mask array.       *       *  This function finds the mask for each char_type in the range [lo,hi)       *  and successively writes it to vec.  vec must have as many elements       *  as the input.       *       *  do_is() is a hook for a derived facet to change the behavior of       *  classifying.  do_is() must always return the same result for the       *  same input.       *

⌨️ 快捷键说明

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