_codecvt.h

来自「stl的源码」· C头文件 代码 · 共 443 行 · 第 1/2 页

H
443
字号
/* * Copyright (c) 1999 * Silicon Graphics Computer Systems, Inc. * * Copyright (c) 1999 * Boris Fomitchev * * This material is provided "as is", with absolutely no warranty expressed * or implied. Any use is at your own risk. * * Permission to use or copy this software for any purpose is hereby granted * without fee, provided the above notices are retained on all copies. * Permission to modify the code and to distribute modified code is granted, * provided the above notices are retained, and a notice that the code was * modified is included with the above copyright notice. * */// WARNING: This is an internal header file, included by other C++// standard library headers.  You should not attempt to use this header// file directly.#ifndef _STLP_INTERNAL_CODECVT_H#define _STLP_INTERNAL_CODECVT_H#ifndef _STLP_C_LOCALE_H#  include <stl/c_locale.h>#endif#ifndef _STLP_INTERNAL_LOCALE_H#  include <stl/_locale.h>#endif#ifndef _STLP_INTERNAL_ALGOBASE_H#  include <stl/_algobase.h>#endif_STLP_BEGIN_NAMESPACEclass _STLP_CLASS_DECLSPEC codecvt_base {public:  enum result {ok, partial, error, noconv};};template <class _InternT, class _ExternT, class _StateT>class codecvt : public locale::facet, public codecvt_base {public:  typedef _InternT intern_type;  typedef _ExternT extern_type;  typedef _StateT state_type;#if defined (_STLP_MSVC) && (_STLP_MSVC < 1300)  /* For the moment VC6 do not support this facet default implementation   * because of the static locale::id instance. When VC6 see this definition   * it goes crasy with locale::id static instances and all the has_facet tests   * unit tests are failing.   */};#else  explicit codecvt(size_t __refs = 0) : locale::facet(__refs) {}  result out(state_type&          __state,             const intern_type*   __from,             const intern_type*   __from_end,             const intern_type*&  __from_next,             extern_type*         __to,             extern_type*         __to_limit,             extern_type*&        __to_next) const {    _STLP_VERBOSE_ASSERT(__from <= __from_end, _StlMsg_INVALID_ARGUMENT)    _STLP_VERBOSE_ASSERT(__to <= __to_limit, _StlMsg_INVALID_ARGUMENT)    return do_out(__state,                  __from, __from_end, __from_next,                  __to,   __to_limit, __to_next);  }  result unshift(state_type&    __state,                 extern_type*   __to,                 extern_type*   __to_limit,                 extern_type*&  __to_next) const {    _STLP_VERBOSE_ASSERT(__to <= __to_limit, _StlMsg_INVALID_ARGUMENT)    return do_unshift(__state, __to, __to_limit, __to_next);  }  result in(state_type&         __state,            const extern_type*  __from,            const extern_type*  __from_end,            const extern_type*& __from_next,            intern_type*        __to,            intern_type*        __to_limit,            intern_type*&       __to_next) const {    _STLP_VERBOSE_ASSERT(__from <= __from_end, _StlMsg_INVALID_ARGUMENT)    _STLP_VERBOSE_ASSERT(__to <= __to_limit, _StlMsg_INVALID_ARGUMENT)    return do_in(__state,                 __from, __from_end, __from_next,                 __to,  __to_limit, __to_next);  }  int encoding() const _STLP_NOTHROW { return do_encoding(); }  bool always_noconv() const _STLP_NOTHROW { return do_always_noconv(); }  int length(state_type&  __state,             const extern_type* __from,             const extern_type* __from_end,             size_t             __max) const {    _STLP_VERBOSE_ASSERT(__from <= __from_end, _StlMsg_INVALID_ARGUMENT)    return do_length(__state, __from, __from_end, __max);  }  int max_length() const _STLP_NOTHROW { return do_max_length(); }  static locale::id id;protected:  ~codecvt() {}  virtual result do_out(state_type&,                        const intern_type*  __from,                        const intern_type*,                        const intern_type*& __from_next,                        extern_type*        __to,                        extern_type*,                        extern_type*&       __to_next) const  { __from_next = __from; __to_next   = __to; return noconv; }  virtual result do_in (state_type&,                        const extern_type*  __from,                        const extern_type*,                        const extern_type*& __from_next,                        intern_type*        __to,                        intern_type*,                        intern_type*&       __to_next) const  { __from_next = __from; __to_next = __to; return noconv; }  virtual result do_unshift(state_type&,                            extern_type* __to,                            extern_type*,                            extern_type*& __to_next) const  { __to_next = __to; return noconv; }  virtual int do_encoding() const _STLP_NOTHROW  { return 1; }  virtual bool do_always_noconv() const _STLP_NOTHROW  { return true; }  virtual int do_length(state_type&,                        const extern_type* __from,                        const extern_type* __end,                        size_t __max) const  { return (int)(min) ( __STATIC_CAST(size_t, (__end - __from)), __max); }  virtual int do_max_length() const _STLP_NOTHROW  { return 1; }private:  codecvt(const codecvt<intern_type, extern_type, state_type>&);  codecvt<intern_type, extern_type, state_type>& operator = (const codecvt<intern_type, extern_type, state_type>&);};#  if defined (_STLP_EXPOSE_STREAM_IMPLEMENTATION) && !defined (_STLP_LINK_TIME_INSTANTIATION)#    if !defined (__BORLANDC__) || (__BORLANDC__ >= 0x590)template <class _InternT, class _ExternT, class _StateT>locale::id codecvt<_InternT, _ExternT, _StateT>::id;#    endif#  endif#endiftemplate <class _InternT, class _ExternT, class _StateT>class codecvt_byname : public codecvt<_InternT, _ExternT, _StateT> {};_STLP_TEMPLATE_NULLclass _STLP_CLASS_DECLSPEC codecvt<char, char, mbstate_t>  : public locale::facet, public codecvt_base {public:  typedef char       intern_type;  typedef char       extern_type;  typedef mbstate_t  state_type;  explicit codecvt(size_t __refs = 0) : locale::facet(__refs) {}  result out(state_type&   __state,             const char*  __from,             const char*  __from_end,             const char*& __from_next,             char*        __to,             char*        __to_limit,             char*&       __to_next) const {    _STLP_VERBOSE_ASSERT(__from <= __from_end, _StlMsg_INVALID_ARGUMENT)    _STLP_VERBOSE_ASSERT(__to <= __to_limit, _StlMsg_INVALID_ARGUMENT)    return do_out(__state,                  __from, __from_end, __from_next,                  __to,   __to_limit, __to_next);  }  result unshift(state_type& __state,                 char* __to, char* __to_limit, char*& __to_next) const {    _STLP_VERBOSE_ASSERT(__to <= __to_limit, _StlMsg_INVALID_ARGUMENT)    return do_unshift(__state, __to, __to_limit, __to_next);  }  result in(state_type&   __state,            const char*  __from,            const char*  __from_end,            const char*& __from_next,            char*        __to,            char*        __to_limit,            char*&       __to_next) const {    _STLP_VERBOSE_ASSERT(__from <= __from_end, _StlMsg_INVALID_ARGUMENT)    _STLP_VERBOSE_ASSERT(__to <= __to_limit, _StlMsg_INVALID_ARGUMENT)    return do_in(__state,                 __from, __from_end, __from_next,                 __to,   __to_limit, __to_next);  }  int encoding() const _STLP_NOTHROW { return do_encoding(); }  bool always_noconv() const _STLP_NOTHROW { return do_always_noconv(); }  int length(state_type& __state,             const char* __from, const char* __from_end,             size_t __max) const {

⌨️ 快捷键说明

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