localefwd.h

来自「ARM Linux Tool 各种代码包括MTD」· C头文件 代码 · 共 460 行

H
460
字号
// Locale support -*- C++ -*-// Copyright (C) 1997, 1998, 1999, 2000, 2001 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//#ifndef _CPP_BITS_LOCCORE_H#define _CPP_BITS_LOCCORE_H	1#pragma GCC system_header#include <bits/c++config.h>#include <bits/c++locale.h>     // Defines __c_locale.#include <bits/std_climits.h>	// For CHAR_BIT#include <bits/std_string.h> 	// For string#include <bits/std_cctype.h>	// For isspace, etc.#include <bits/functexcept.h>namespace std{  // NB: Don't instantiate required wchar_t facets if no wchar_t support.#ifdef _GLIBCPP_USE_WCHAR_T# define  _GLIBCPP_NUM_FACETS 26#else# define  _GLIBCPP_NUM_FACETS 13#endif  // 22.1.1 Locale  template<typename _Tp, typename _Alloc>     class vector;  class locale;  // 22.1.3 Convenience interfaces  template<typename _CharT>     inline bool     isspace(_CharT, const locale&);  template<typename _CharT>     inline bool     isprint(_CharT, const locale&);  template<typename _CharT>     inline bool     iscntrl(_CharT, const locale&);  template<typename _CharT>     inline bool     isupper(_CharT, const locale&);  template<typename _CharT>     inline bool     islower(_CharT, const locale&);  template<typename _CharT>     inline bool     isalpha(_CharT, const locale&);  template<typename _CharT>     inline bool     isdigit(_CharT, const locale&);  template<typename _CharT>     inline bool     ispunct(_CharT, const locale&);  template<typename _CharT>     inline bool     isxdigit(_CharT, const locale&);  template<typename _CharT>     inline bool     isalnum(_CharT, const locale&);  template<typename _CharT>     inline bool     isgraph(_CharT, const locale&);  template<typename _CharT>     inline _CharT     toupper(_CharT, const locale&);  template<typename _CharT>     inline _CharT     tolower(_CharT, const locale&);  // 22.2.1 and 22.2.1.3 ctype  class ctype_base;  template<typename _CharT>     class ctype;  template<> class ctype<char>;#ifdef _GLIBCPP_USE_WCHAR_T  template<> class ctype<wchar_t>;#endif  template<typename _CharT>     class ctype_byname;  // NB: Specialized for char and wchar_t in locale_facets.h.  class codecvt_base;  template<typename _InternT, typename _ExternT, typename _StateT>    class codecvt;  template<> class codecvt<char, char, mbstate_t>;#ifdef _GLIBCPP_USE_WCHAR_T  template<> class codecvt<wchar_t, char, mbstate_t>;#endif  template<typename _InternT, typename _ExternT, typename _StateT>    class codecvt_byname;  // 22.2.2 and 22.2.3 numeric  template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> >    class num_get;  template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >    class num_put;  template<typename _CharT> class numpunct;  template<typename _CharT> class numpunct_byname;  // 22.2.4 collation  template<typename _CharT>     class collate;  template<typename _CharT> class     collate_byname;  // 22.2.5 date and time  class time_base;  template<typename _CharT, typename _InIter =  istreambuf_iterator<_CharT> >    class time_get;  template<typename _CharT, typename _InIter =  istreambuf_iterator<_CharT> >    class time_get_byname;  template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >    class time_put;  template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >    class time_put_byname;  // 22.2.6 money  class money_base;  template<typename _CharT, typename _InIter =  istreambuf_iterator<_CharT> >    class money_get;  template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >    class money_put;  template<typename _CharT, bool _Intl = false>     class moneypunct;  template<typename _CharT, bool _Intl = false>     class moneypunct_byname;  // 22.2.7 message retrieval  class messages_base;  template<typename _CharT>     class messages;  template<typename _CharT>     class messages_byname;  // 22.1.1 Class locale  class locale  {  public:    // Types:    typedef unsigned int 	category;    // Forward decls and friends:    class facet;    class id;    class _Impl;    friend class facet;    friend class _Impl;    template<typename _Facet>      friend const _Facet&       use_facet(const locale&);        template<typename _Facet>      friend bool       has_facet(const locale&) throw();     // Category values:    // NB: Order must match _S_facet_categories definition in locale.cc    static const category none		= 0;    static const category ctype 	= 1L << 0;    static const category numeric 	= 1L << 1;    static const category collate  	= 1L << 2;    static const category time 		= 1L << 3;    static const category monetary 	= 1L << 4;    static const category messages 	= 1L << 5;    static const category all 		= (collate | ctype | monetary |				 	   numeric | time  | messages);    // Construct/copy/destroy:    locale() throw();    locale(const locale& __other) throw();    explicit      locale(const char* __std_name);    locale(const locale& __base, const char* __s, category __cat);    locale(const locale& __base, const locale& __add, category __cat);    template<typename _Facet>      locale(const locale& __other, _Facet* __f);    ~locale() throw();    const locale&      operator=(const locale& __other) throw();    template<typename _Facet>      locale        combine(const locale& __other);    // Locale operations:    string     name() const;    bool     operator==(const locale& __other) const throw ();    inline bool      operator!=(const locale& __other) const throw ()    { return !(this->operator==(__other));  }    template<typename _Char, typename _Traits, typename _Alloc>      bool        operator()(const basic_string<_Char, _Traits, _Alloc>& __s1,		 const basic_string<_Char, _Traits, _Alloc>& __s2) const;    // Global locale objects:    static locale     global(const locale&);    static const locale&     classic();  private:    // The (shared) implementation    _Impl* 		_M_impl;      // The "C" reference locale    static _Impl* 	_S_classic;     // Current global reference locale    static _Impl* 	_S_global;      static const size_t	_S_num_categories = 6;    static const size_t _S_num_facets = _GLIBCPP_NUM_FACETS;    explicit     locale(_Impl*) throw();    static inline void      _S_initialize()    { if (!_S_classic) classic();  }    static category      _S_normalize_category(category);    void    _M_coalesce(const locale& __base, const locale& __add, category __cat);  };  // locale implementation object  class locale::_Impl  {  public:    // Types.    typedef vector<facet*, allocator<facet*> > 	__vec_facet;    // Friends.    friend class locale;    friend class locale::facet;    template<typename _Facet>      friend const _Facet&        use_facet(const locale&);    template<typename _Facet>      friend bool        has_facet(const locale&) throw();  private:    // Data Members.    size_t 				_M_references;    __vec_facet* 			_M_facets;    string 				_M_names[_S_num_categories];    __c_locale				_M_c_locale;    static const locale::id* const 	_S_id_ctype[];    static const locale::id* const 	_S_id_numeric[];    static const locale::id* const 	_S_id_collate[];    static const locale::id* const 	_S_id_time[];    static const locale::id* const 	_S_id_monetary[];    static const locale::id* const 	_S_id_messages[];    static const locale::id* const* const _S_facet_categories[];    inline void     _M_add_reference() throw()    { ++_M_references; }  // XXX MT    inline void     _M_remove_reference() throw()    {      if (_M_references-- == 0)  // XXX MT	{	  try 	    { delete this; } 	  catch(...) 	    { }	}    }    _Impl(const _Impl&, size_t);    _Impl(string __name, size_t);   ~_Impl() throw();    bool    _M_check_same_name()    {      bool __ret = true;      for (size_t i = 0; i < _S_num_categories - 1; ++i)	__ret &= _M_names[i] == _M_names[i + 1];      return __ret;    }    void     _M_replace_categories(const _Impl*, category);    void     _M_replace_category(const _Impl*, const locale::id* const*);    void     _M_replace_facet(const _Impl*, const locale::id*);    void     _M_install_facet(const locale::id*, facet*);    template<typename _Facet>      inline void       _M_init_facet(_Facet* __facet)      { _M_install_facet(&_Facet::id, __facet);  }  };  template<typename _Facet>    locale::locale(const locale& __other, _Facet* __f)    {      _M_impl = new _Impl(*__other._M_impl, 1);      _M_impl->_M_install_facet(&_Facet::id, __f);      for (size_t __i = 0; __i < _S_num_categories; ++__i)	_M_impl->_M_names[__i] = "*";    }  // 22.1.1.1.2  Class locale::facet  class locale::facet  {    friend class locale;    friend class locale::_Impl;  protected:    explicit     facet(size_t __refs = 0) throw();    virtual     ~facet() { };    static void    _S_create_c_locale(__c_locale& __cloc, const char* __s);    static void    _S_destroy_c_locale(__c_locale& __cloc);  private:    size_t _M_references;    void     _M_add_reference() throw();    void     _M_remove_reference() throw();    facet(const facet&);  // not defined    void     operator=(const facet&);  // not defined  };  // 22.1.1.1.3 Class locale::id  class locale::id  {  private:    friend class locale;    friend class locale::_Impl;    template<typename _Facet>      friend const _Facet&        use_facet(const locale&);    template<typename _Facet>      friend bool                 has_facet(const locale&) throw ();    // NB: There is no accessor for _M_index because it may be used    // before the constructor is run; the effect of calling a member    // function (even an inline) would be undefined.    mutable size_t 	_M_index;    // Last id number assigned    static size_t 	_S_highwater;       void     operator=(const id&);  // not defined    id(const id&);  // not defined  public:    // NB: This class is always a static data member, and thus can be    // counted on to be zero-initialized.    // XXX id() : _M_index(0) { }    id() { }  };  template<typename _Facet>    const _Facet&    use_facet(const locale& __loc);  template<typename _Facet>    bool    has_facet(const locale& __loc) throw();} // namespace std#endif	/* _CPP_BITS_LOCCORE_H */// Local Variables:// mode:c++// End:

⌨️ 快捷键说明

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