111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (c) 1999 311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Silicon Graphics Computer Systems, Inc. 411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (c) 1999 611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Boris Fomitchev 711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * This material is provided "as is", with absolutely no warranty expressed 911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * or implied. Any use is at your own risk. 1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Permission to use or copy this software for any purpose is hereby granted 1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * without fee, provided the above notices are retained on all copies. 1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Permission to modify the code and to distribute modified code is granted, 1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * provided the above notices are retained, and a notice that the code was 1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * modified is included with the above copyright notice. 1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// WARNING: This is an internal header file, included by other C++ 1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// standard library headers. You should not attempt to use this header 2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// file directly. 2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _STLP_INTERNAL_CODECVT_H 2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _STLP_INTERNAL_CODECVT_H 2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _STLP_C_LOCALE_H 2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# include <stl/c_locale.h> 2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _STLP_INTERNAL_LOCALE_H 3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# include <stl/_locale.h> 3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _STLP_INTERNAL_ALGOBASE_H 3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# include <stl/_algobase.h> 3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_BEGIN_NAMESPACE 3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass _STLP_CLASS_DECLSPEC codecvt_base { 4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertpublic: 4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert enum result {ok, partial, error, noconv}; 4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4511cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _InternT, class _ExternT, class _StateT> 4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass codecvt : public locale::facet, public codecvt_base { 4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertpublic: 4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef _InternT intern_type; 4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef _ExternT extern_type; 5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef _StateT state_type; 5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_MSVC) && (_STLP_MSVC < 1300) 5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /* For the moment VC6 do not support this facet default implementation 5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * because of the static locale::id instance. When VC6 see this definition 5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * it goes crasy with locale::id static instances and all the has_facet tests 5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * unit tests are failing. 5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else 6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert explicit codecvt(size_t __refs = 0) : locale::facet(__refs) {} 6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert result out(state_type& __state, 6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const intern_type* __from, 6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const intern_type* __from_end, 6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const intern_type*& __from_next, 6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert extern_type* __to, 6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert extern_type* __to_limit, 6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert extern_type*& __to_next) const { 6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_VERBOSE_ASSERT(__from <= __from_end, _StlMsg_INVALID_ARGUMENT) 7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_VERBOSE_ASSERT(__to <= __to_limit, _StlMsg_INVALID_ARGUMENT) 7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return do_out(__state, 7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __from, __from_end, __from_next, 7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __to, __to_limit, __to_next); 7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert result unshift(state_type& __state, 7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert extern_type* __to, 7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert extern_type* __to_limit, 7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert extern_type*& __to_next) const { 8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_VERBOSE_ASSERT(__to <= __to_limit, _StlMsg_INVALID_ARGUMENT) 8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return do_unshift(__state, __to, __to_limit, __to_next); 8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert result in(state_type& __state, 8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const extern_type* __from, 8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const extern_type* __from_end, 8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const extern_type*& __from_next, 8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert intern_type* __to, 8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert intern_type* __to_limit, 9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert intern_type*& __to_next) const { 9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_VERBOSE_ASSERT(__from <= __from_end, _StlMsg_INVALID_ARGUMENT) 9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_VERBOSE_ASSERT(__to <= __to_limit, _StlMsg_INVALID_ARGUMENT) 9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return do_in(__state, 9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __from, __from_end, __from_next, 9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __to, __to_limit, __to_next); 9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int encoding() const _STLP_NOTHROW { return do_encoding(); } 9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert bool always_noconv() const _STLP_NOTHROW { return do_always_noconv(); } 10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int length(state_type& __state, 10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const extern_type* __from, 10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const extern_type* __from_end, 10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_t __max) const { 10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_VERBOSE_ASSERT(__from <= __from_end, _StlMsg_INVALID_ARGUMENT) 10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return do_length(__state, __from, __from_end, __max); 10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int max_length() const _STLP_NOTHROW { return do_max_length(); } 11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert static locale::id id; 11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertprotected: 11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ~codecvt() {} 11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert virtual result do_out(state_type&, 11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const intern_type* __from, 11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const intern_type*, 12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const intern_type*& __from_next, 12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert extern_type* __to, 12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert extern_type*, 12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert extern_type*& __to_next) const 12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { __from_next = __from; __to_next = __to; return noconv; } 12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 12611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert virtual result do_in (state_type&, 12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const extern_type* __from, 12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const extern_type*, 12911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const extern_type*& __from_next, 13011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert intern_type* __to, 13111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert intern_type*, 13211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert intern_type*& __to_next) const 13311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { __from_next = __from; __to_next = __to; return noconv; } 13411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 13511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert virtual result do_unshift(state_type&, 13611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert extern_type* __to, 13711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert extern_type*, 13811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert extern_type*& __to_next) const 13911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { __to_next = __to; return noconv; } 14011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 14111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert virtual int do_encoding() const _STLP_NOTHROW 14211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return 1; } 14311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 14411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert virtual bool do_always_noconv() const _STLP_NOTHROW 14511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return true; } 14611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 14711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert virtual int do_length(state_type&, 14811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const extern_type* __from, 14911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const extern_type* __end, 15011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_t __max) const 15111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return (int)(min) ( __STATIC_CAST(size_t, (__end - __from)), __max); } 15211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 15311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert virtual int do_max_length() const _STLP_NOTHROW 15411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { return 1; } 15511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 15611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertprivate: 15711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert codecvt(const codecvt<intern_type, extern_type, state_type>&); 15811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert codecvt<intern_type, extern_type, state_type>& operator = (const codecvt<intern_type, extern_type, state_type>&); 15911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 16011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 16111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# if defined (_STLP_EXPOSE_STREAM_IMPLEMENTATION) && !defined (_STLP_LINK_TIME_INSTANTIATION) 16211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# if !defined (__BORLANDC__) || (__BORLANDC__ >= 0x590) 16311cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _InternT, class _ExternT, class _StateT> 16411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertlocale::id codecvt<_InternT, _ExternT, _StateT>::id; 16511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# endif 16611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# endif 16711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 16811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 16911cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _InternT, class _ExternT, class _StateT> 17011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass codecvt_byname : public codecvt<_InternT, _ExternT, _StateT> {}; 17111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 17211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_TEMPLATE_NULL 17311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass _STLP_CLASS_DECLSPEC codecvt<char, char, mbstate_t> 17411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : public locale::facet, public codecvt_base { 17511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertpublic: 17611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef char intern_type; 17711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef char extern_type; 17811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef mbstate_t state_type; 17911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 18011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert explicit codecvt(size_t __refs = 0) : locale::facet(__refs) {} 18111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 18211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert result out(state_type& __state, 18311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char* __from, 18411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char* __from_end, 18511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char*& __from_next, 18611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char* __to, 18711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char* __to_limit, 18811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char*& __to_next) const { 18911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_VERBOSE_ASSERT(__from <= __from_end, _StlMsg_INVALID_ARGUMENT) 19011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_VERBOSE_ASSERT(__to <= __to_limit, _StlMsg_INVALID_ARGUMENT) 19111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return do_out(__state, 19211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __from, __from_end, __from_next, 19311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __to, __to_limit, __to_next); 19411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 19511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 19611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert result unshift(state_type& __state, 19711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char* __to, char* __to_limit, char*& __to_next) const { 19811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_VERBOSE_ASSERT(__to <= __to_limit, _StlMsg_INVALID_ARGUMENT) 19911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return do_unshift(__state, __to, __to_limit, __to_next); 20011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 20111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 20211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert result in(state_type& __state, 20311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char* __from, 20411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char* __from_end, 20511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char*& __from_next, 20611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char* __to, 20711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char* __to_limit, 20811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char*& __to_next) const { 20911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_VERBOSE_ASSERT(__from <= __from_end, _StlMsg_INVALID_ARGUMENT) 21011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_VERBOSE_ASSERT(__to <= __to_limit, _StlMsg_INVALID_ARGUMENT) 21111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return do_in(__state, 21211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __from, __from_end, __from_next, 21311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __to, __to_limit, __to_next); 21411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 21511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 21611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int encoding() const _STLP_NOTHROW { return do_encoding(); } 21711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 21811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert bool always_noconv() const _STLP_NOTHROW { return do_always_noconv(); } 21911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 22011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int length(state_type& __state, 22111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char* __from, const char* __from_end, 22211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_t __max) const { 22311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_VERBOSE_ASSERT(__from <= __from_end, _StlMsg_INVALID_ARGUMENT) 22411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return do_length(__state, __from, __from_end, __max); 22511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 22611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 22711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int max_length() const _STLP_NOTHROW { return do_max_length(); } 22811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 22911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert static _STLP_STATIC_DECLSPEC locale::id id; 23011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 23111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertprotected: 23211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ~codecvt(); 23311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 23411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert virtual result do_out(state_type& /* __state */, 23511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char* __from, 23611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char* /* __from_end */, 23711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char*& __from_next, 23811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char* __to, 23911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char* /* __to_limit */, 24011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char*& __to_next) const; 24111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 24211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert virtual result do_in (state_type& /* __state */ , 24311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char* __from, 24411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char* /* __from_end */, 24511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char*& __from_next, 24611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char* __to, 24711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char* /* __to_end */, 24811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char*& __to_next) const; 24911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 25011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert virtual result do_unshift(state_type& /* __state */, 25111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char* __to, 25211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char* /* __to_limit */, 25311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char*& __to_next) const; 25411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 25511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert virtual int do_encoding() const _STLP_NOTHROW; 25611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert virtual bool do_always_noconv() const _STLP_NOTHROW; 25711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert virtual int do_length(state_type& __state, 25811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char* __from, 25911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char* __end, 26011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_t __max) const; 26111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert virtual int do_max_length() const _STLP_NOTHROW; 26211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertprivate: 26311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert codecvt(const codecvt<char, char, mbstate_t>&); 26411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert codecvt<char, char, mbstate_t>& operator =(const codecvt<char, char, mbstate_t>&); 26511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 26611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 26711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# ifndef _STLP_NO_WCHAR_T 26811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 26911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_TEMPLATE_NULL 27011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass _STLP_CLASS_DECLSPEC codecvt<wchar_t, char, mbstate_t> 27111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : public locale::facet, public codecvt_base { 27211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertpublic: 27311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef wchar_t intern_type; 27411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef char extern_type; 27511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef mbstate_t state_type; 27611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 27711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert explicit codecvt(size_t __refs = 0) : locale::facet(__refs) {} 27811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 27911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert result out(state_type& __state, 28011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const wchar_t* __from, 28111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const wchar_t* __from_end, 28211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const wchar_t*& __from_next, 28311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char* __to, 28411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char* __to_limit, 28511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char*& __to_next) const { 28611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_VERBOSE_ASSERT(__from <= __from_end, _StlMsg_INVALID_ARGUMENT) 28711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_VERBOSE_ASSERT(__to <= __to_limit, _StlMsg_INVALID_ARGUMENT) 28811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return do_out(__state, 28911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __from, __from_end, __from_next, 29011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __to, __to_limit, __to_next); 29111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 29211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 29311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert result unshift(state_type& __state, 29411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char* __to, char* __to_limit, char*& __to_next) const { 29511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_VERBOSE_ASSERT(__to <= __to_limit, _StlMsg_INVALID_ARGUMENT) 29611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return do_unshift(__state, __to, __to_limit, __to_next); 29711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 29811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 29911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert result in(state_type& __state, 30011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char* __from, 30111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char* __from_end, 30211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char*& __from_next, 30311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert wchar_t* __to, 30411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert wchar_t* __to_limit, 30511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert wchar_t*& __to_next) const { 30611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_VERBOSE_ASSERT(__from <= __from_end, _StlMsg_INVALID_ARGUMENT) 30711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_VERBOSE_ASSERT(__to <= __to_limit, _StlMsg_INVALID_ARGUMENT) 30811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return do_in(__state, 30911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __from, __from_end, __from_next, 31011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __to, __to_limit, __to_next); 31111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 31211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 31311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int encoding() const _STLP_NOTHROW { return do_encoding(); } 31411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 31511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert bool always_noconv() const _STLP_NOTHROW { return do_always_noconv(); } 31611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 31711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int length(state_type& __state, 31811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char* __from, const char* __from_end, 31911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_t __max) const { 32011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_VERBOSE_ASSERT(__from <= __from_end, _StlMsg_INVALID_ARGUMENT) 32111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return do_length(__state, __from, __from_end, __max); 32211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 32311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 32411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert int max_length() const _STLP_NOTHROW { return do_max_length(); } 32511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 32611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert static _STLP_STATIC_DECLSPEC locale::id id; 32711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 32811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertprotected: 32911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ~codecvt(); 33011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 33111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert virtual result do_out(state_type& __state, 33211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const wchar_t* __from, 33311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const wchar_t* __from_end, 33411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const wchar_t*& __from_next, 33511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char* __to, 33611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char* __to_limit, 33711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char*& __to_next) const; 33811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 33911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert virtual result do_in (state_type& __state, 34011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char* __from, 34111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char* __from_end, 34211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char*& __from_next, 34311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert wchar_t* __to, 34411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert wchar_t* __to_limit, 34511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert wchar_t*& __to_next) const; 34611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 34711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert virtual result do_unshift(state_type& __state, 34811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char* __to, 34911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char* __to_limit, 35011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char*& __to_next) const; 35111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 35211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert virtual int do_encoding() const _STLP_NOTHROW; 35311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 35411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert virtual bool do_always_noconv() const _STLP_NOTHROW; 35511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 35611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert virtual int do_length(state_type& __state, 35711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char* __from, 35811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char* __end, 35911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_t __max) const; 36011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 36111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert virtual int do_max_length() const _STLP_NOTHROW; 36211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 36311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertprivate: 36411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert codecvt(const codecvt<wchar_t, char, mbstate_t>&); 36511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert codecvt<wchar_t, char, mbstate_t>& operator = (const codecvt<wchar_t, char, mbstate_t>&); 36611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 36711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 36811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# endif 36911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 37011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_TEMPLATE_NULL 37111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass _STLP_CLASS_DECLSPEC codecvt_byname<char, char, mbstate_t> 37211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : public codecvt<char, char, mbstate_t> { 37311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertpublic: 37411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert explicit codecvt_byname(const char* __name, size_t __refs = 0); 37511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ~codecvt_byname(); 37611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertprivate: 37711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert codecvt_byname(const codecvt_byname<char, char, mbstate_t>&); 37811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert codecvt_byname<char, char, mbstate_t>& operator =(const codecvt_byname<char, char, mbstate_t>&); 37911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 38011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 38111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# ifndef _STLP_NO_WCHAR_T 38211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_TEMPLATE_NULL 38311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass _STLP_CLASS_DECLSPEC codecvt_byname<wchar_t, char, mbstate_t> 38411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : public codecvt<wchar_t, char, mbstate_t> { 38511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert friend class _Locale_impl; 38611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertpublic: 38711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert explicit codecvt_byname(const char * __name, size_t __refs = 0); 38811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 38911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertprotected: 39011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ~codecvt_byname(); 39111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 39211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert virtual result do_out(state_type& __state, 39311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const wchar_t* __from, 39411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const wchar_t* __from_end, 39511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const wchar_t*& __from_next, 39611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char* __to, 39711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char* __to_limit, 39811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char*& __to_next) const; 39911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 40011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert virtual result do_in (state_type& __state, 40111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char* __from, 40211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char* __from_end, 40311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char*& __from_next, 40411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert wchar_t* __to, 40511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert wchar_t* __to_limit, 40611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert wchar_t*& __to_next) const; 40711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 40811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert virtual result do_unshift(state_type& __state, 40911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char* __to, 41011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char* __to_limit, 41111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert char*& __to_next) const; 41211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 41311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert virtual int do_encoding() const _STLP_NOTHROW; 41411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 41511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert virtual bool do_always_noconv() const _STLP_NOTHROW; 41611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 41711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert virtual int do_length(state_type& __state, 41811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char* __from, 41911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const char* __end, 42011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_t __max) const; 42111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 42211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert virtual int do_max_length() const _STLP_NOTHROW; 42311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 42411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertprivate: 42511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert codecvt_byname(_Locale_codecvt* __cvt) 42611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _M_codecvt(__cvt) {} 42711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 42811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert codecvt_byname(const codecvt_byname<wchar_t, char, mbstate_t>&); 42911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert codecvt_byname<wchar_t, char, mbstate_t>& operator =(const codecvt_byname<wchar_t, char, mbstate_t>&); 43011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Locale_codecvt* _M_codecvt; 43111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 43211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 43311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# endif 43411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 43511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_END_NAMESPACE 43611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 43711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /* _STLP_INTERNAL_CODECVT_H */ 43811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 43911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Local Variables: 44011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// mode:C++ 44111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// End: 44211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 443