williamr@2: /* williamr@2: * © Portions copyright (c) 2006-2007 Nokia Corporation. All rights reserved. williamr@2: * williamr@2: * Copyright (c) 1999 williamr@2: * Silicon Graphics Computer Systems, Inc. williamr@2: * williamr@2: * Copyright (c) 1999 williamr@2: * Boris Fomitchev williamr@2: * williamr@2: * This material is provided "as is", with absolutely no warranty expressed williamr@2: * or implied. Any use is at your own risk. williamr@2: * williamr@2: * Permission to use or copy this software for any purpose is hereby granted williamr@2: * without fee, provided the above notices are retained on all copies. williamr@2: * Permission to modify the code and to distribute modified code is granted, williamr@2: * provided the above notices are retained, and a notice that the code was williamr@2: * modified is included with the above copyright notice. williamr@2: * williamr@2: */ williamr@2: // WARNING: This is an internal header file, included by other C++ williamr@2: // standard library headers. You should not attempt to use this header williamr@2: // file directly. williamr@2: williamr@2: williamr@2: #ifndef _STLP_INTERNAL_CODECVT_H williamr@2: #define _STLP_INTERNAL_CODECVT_H williamr@2: williamr@2: # ifndef _STLP_C_LOCALE_H williamr@2: # include williamr@2: # endif williamr@2: # ifndef _STLP_INTERNAL_LOCALE_H williamr@2: # include williamr@2: # endif williamr@2: williamr@2: _STLP_BEGIN_NAMESPACE williamr@2: williamr@2: class _STLP_CLASS_DECLSPEC codecvt_base { williamr@2: public: williamr@2: enum result {ok, partial, error, noconv}; williamr@2: }; williamr@2: williamr@2: template williamr@2: class codecvt : public locale::facet, public codecvt_base { williamr@2: typedef _InternT intern_type; williamr@2: typedef _ExternT extern_type; williamr@2: typedef _StateT state_type; williamr@2: }; williamr@2: williamr@2: template williamr@2: class codecvt_byname : public codecvt<_InternT, _ExternT, _StateT> {}; williamr@2: williamr@2: _STLP_TEMPLATE_NULL williamr@2: #ifdef __SYMBIAN32__ williamr@2: class codecvt : public locale::facet, public codecvt_base williamr@2: #else williamr@2: class _STLP_CLASS_DECLSPEC codecvt : public locale::facet, public codecvt_base williamr@2: #endif williamr@2: { williamr@2: friend class _Locale; williamr@2: public: williamr@2: typedef char intern_type; williamr@2: typedef char extern_type; williamr@2: typedef mbstate_t state_type; williamr@2: williamr@2: explicit codecvt(size_t __refs = 0) : _BaseFacet(__refs) {} williamr@2: williamr@2: result out(state_type& __state, williamr@2: const char* __from, williamr@2: const char* __from_end, williamr@2: const char*& __from_next, williamr@2: char* __to, williamr@2: char* __to_limit, williamr@2: char*& __to_next) const { williamr@2: return do_out(__state, williamr@2: __from, __from_end, __from_next, williamr@2: __to, __to_limit, __to_next); williamr@2: } williamr@2: williamr@2: result unshift(mbstate_t& __state, williamr@2: char* __to, char* __to_limit, char*& __to_next) const williamr@2: { return do_unshift(__state, __to, __to_limit, __to_next); } williamr@2: williamr@2: result in(state_type& __state, williamr@2: const char* __from, williamr@2: const char* __from_end, williamr@2: const char*& __from_next, williamr@2: char* __to, williamr@2: char* __to_limit, williamr@2: char*& __to_next) const { williamr@2: return do_in(__state, williamr@2: __from, __from_end, __from_next, williamr@2: __to, __to_limit, __to_next); williamr@2: } williamr@2: williamr@2: int encoding() const _STLP_NOTHROW { return do_encoding(); } williamr@2: williamr@2: bool always_noconv() const _STLP_NOTHROW { return do_always_noconv(); } williamr@2: williamr@2: int length(const state_type& __state, williamr@2: const char* __from, const char* __end, williamr@2: size_t __max) const williamr@2: { return do_length(__state, __from, __end, __max); } williamr@2: williamr@2: int max_length() const _STLP_NOTHROW { return do_max_length(); } williamr@2: williamr@2: #if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_) williamr@2: _STLP_STATIC_MEMBER_DECLSPEC static locale::id& GetFacetLocaleId(); williamr@2: #else williamr@2: _STLP_STATIC_MEMBER_DECLSPEC static locale::id id; williamr@2: #endif williamr@2: williamr@2: protected: williamr@2: _STLP_DECLSPEC ~codecvt(); williamr@2: williamr@2: _STLP_DECLSPEC virtual result do_out(mbstate_t& /* __state */, williamr@2: const char* __from, williamr@2: const char* /* __from_end */, williamr@2: const char*& __from_next, williamr@2: char* __to, williamr@2: char* /* __to_limit */, williamr@2: char*& __to_next) const; williamr@2: williamr@2: _STLP_DECLSPEC virtual result do_in (mbstate_t& /* __state */ , williamr@2: const char* __from, williamr@2: const char* /* __from_end */, williamr@2: const char*& __from_next, williamr@2: char* __to, williamr@2: char* /* __to_end */, williamr@2: char*& __to_next) const; williamr@2: williamr@2: _STLP_DECLSPEC virtual result do_unshift(mbstate_t& /* __state */, williamr@2: char* __to, williamr@2: char* /* __to_limit */, williamr@2: char*& __to_next) const; williamr@2: williamr@2: _STLP_DECLSPEC virtual int do_encoding() const _STLP_NOTHROW; williamr@2: _STLP_DECLSPEC virtual bool do_always_noconv() const _STLP_NOTHROW; williamr@2: _STLP_DECLSPEC virtual int do_length(const mbstate_t& __state, williamr@2: const char* __from, williamr@2: const char* __end, williamr@2: size_t __max) const; williamr@2: _STLP_DECLSPEC virtual int do_max_length() const _STLP_NOTHROW; williamr@2: private: williamr@2: codecvt(const codecvt&); williamr@2: codecvt& operator =(const codecvt&); williamr@2: }; williamr@2: williamr@2: # ifndef _STLP_NO_WCHAR_T williamr@2: williamr@2: _STLP_TEMPLATE_NULL williamr@2: #if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_) williamr@2: class codecvt : public locale::facet, public codecvt_base williamr@2: #else williamr@2: class _STLP_CLASS_DECLSPEC codecvt : public locale::facet, public codecvt_base williamr@2: #endif williamr@2: { williamr@2: friend class _Locale; williamr@2: public: williamr@2: typedef wchar_t intern_type; williamr@2: typedef char extern_type; williamr@2: typedef mbstate_t state_type; williamr@2: williamr@2: explicit codecvt(size_t __refs = 0) : _BaseFacet(__refs) {} williamr@2: williamr@2: result out(mbstate_t& __state, williamr@2: const wchar_t* __from, williamr@2: const wchar_t* __from_end, williamr@2: const wchar_t*& __from_next, williamr@2: char* __to, williamr@2: char* __to_limit, williamr@2: char*& __to_next) const { williamr@2: return do_out(__state, williamr@2: __from, __from_end, __from_next, williamr@2: __to, __to_limit, __to_next); williamr@2: } williamr@2: williamr@2: result unshift(mbstate_t& __state, williamr@2: char* __to, char* __to_limit, char*& __to_next) const { williamr@2: return do_unshift(__state, __to, __to_limit, __to_next); williamr@2: } williamr@2: williamr@2: result in(mbstate_t& __state, williamr@2: const char* __from, williamr@2: const char* __from_end, williamr@2: const char*& __from_next, williamr@2: wchar_t* __to, williamr@2: wchar_t* __to_limit, williamr@2: wchar_t*& __to_next) const { williamr@2: return do_in(__state, williamr@2: __from, __from_end, __from_next, williamr@2: __to, __to_limit, __to_next); williamr@2: } williamr@2: williamr@2: int encoding() const _STLP_NOTHROW { return do_encoding(); } williamr@2: williamr@2: bool always_noconv() const _STLP_NOTHROW { return do_always_noconv(); } williamr@2: williamr@2: int length(const mbstate_t& __state, williamr@2: const char* __from, williamr@2: const char* __end, williamr@2: size_t __max) const williamr@2: { return do_length(__state, __from, __end, __max); } williamr@2: williamr@2: int max_length() const _STLP_NOTHROW { return do_max_length(); } williamr@2: williamr@2: #if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_) williamr@2: _STLP_STATIC_MEMBER_DECLSPEC static locale::id& GetFacetLocaleId(); williamr@2: #else williamr@2: _STLP_STATIC_MEMBER_DECLSPEC static locale::id id; williamr@2: #endif williamr@2: williamr@2: protected: williamr@2: _STLP_DECLSPEC ~codecvt(); williamr@2: williamr@2: _STLP_DECLSPEC virtual result do_out(mbstate_t& __state, williamr@2: const wchar_t* __from, williamr@2: const wchar_t* __from_end, williamr@2: const wchar_t*& __from_next, williamr@2: char* __to, williamr@2: char* __to_limit, williamr@2: char*& __to_next) const; williamr@2: williamr@2: _STLP_DECLSPEC virtual result do_in (mbstate_t& __state, williamr@2: const char* __from, williamr@2: const char* __from_end, williamr@2: const char*& __from_next, williamr@2: wchar_t* __to, williamr@2: wchar_t* __to_limit, williamr@2: wchar_t*& __to_next) const; williamr@2: williamr@2: _STLP_DECLSPEC virtual result do_unshift(mbstate_t& __state, williamr@2: char* __to, williamr@2: char* __to_limit, williamr@2: char*& __to_next) const; williamr@2: williamr@2: _STLP_DECLSPEC virtual int do_encoding() const _STLP_NOTHROW; williamr@2: williamr@2: _STLP_DECLSPEC virtual bool do_always_noconv() const _STLP_NOTHROW; williamr@2: williamr@2: _STLP_DECLSPEC virtual int do_length(const mbstate_t& __state, williamr@2: const char* __from, williamr@2: const char* __end, williamr@2: size_t __max) const; williamr@2: williamr@2: _STLP_DECLSPEC virtual int do_max_length() const _STLP_NOTHROW; williamr@2: williamr@2: private: williamr@2: codecvt(const codecvt&); williamr@2: codecvt& operator = (const codecvt&); williamr@2: }; williamr@2: williamr@2: # endif williamr@2: williamr@2: _STLP_TEMPLATE_NULL williamr@2: class _STLP_CLASS_DECLSPEC codecvt_byname williamr@2: : public codecvt { williamr@2: public: williamr@2: explicit _STLP_DECLSPEC codecvt_byname(const char* __name, size_t __refs = 0); williamr@2: ~codecvt_byname(); williamr@2: private: williamr@2: codecvt_byname(const codecvt_byname&); williamr@2: codecvt_byname& operator =(const codecvt_byname&); williamr@2: }; williamr@2: williamr@2: # ifndef _STLP_NO_WCHAR_T williamr@2: _STLP_TEMPLATE_NULL williamr@2: class codecvt_byname williamr@2: : public codecvt williamr@2: { williamr@2: public: williamr@2: explicit _STLP_DECLSPEC codecvt_byname(const char * __name, size_t __refs = 0); williamr@2: williamr@2: protected: williamr@2: _STLP_DECLSPEC ~codecvt_byname(); williamr@2: williamr@2: _STLP_DECLSPEC virtual result do_out(mbstate_t& __state, williamr@2: const wchar_t* __from, williamr@2: const wchar_t* __from_end, williamr@2: const wchar_t*& __from_next, williamr@2: char* __to, williamr@2: char* __to_limit, williamr@2: char*& __to_next) const; williamr@2: williamr@2: _STLP_DECLSPEC virtual result do_in (mbstate_t& __state, williamr@2: const char* __from, williamr@2: const char* __from_end, williamr@2: const char*& __from_next, williamr@2: wchar_t* __to, williamr@2: wchar_t* __to_limit, williamr@2: wchar_t*& __to_next) const; williamr@2: williamr@2: _STLP_DECLSPEC virtual result do_unshift(mbstate_t& __state, williamr@2: char* __to, williamr@2: char* __to_limit, williamr@2: char*& __to_next) const; williamr@2: williamr@2: _STLP_DECLSPEC virtual int do_encoding() const _STLP_NOTHROW; williamr@2: williamr@2: _STLP_DECLSPEC virtual bool do_always_noconv() const _STLP_NOTHROW; williamr@2: williamr@2: _STLP_DECLSPEC virtual int do_length(const mbstate_t& __state, williamr@2: const char* __from, williamr@2: const char* __end, williamr@2: size_t __max) const; williamr@2: williamr@2: _STLP_DECLSPEC virtual int do_max_length() const _STLP_NOTHROW; williamr@2: williamr@2: private: williamr@2: _Locale_ctype* _M_ctype; williamr@2: codecvt_byname(const codecvt_byname&); williamr@2: codecvt_byname& operator =(const codecvt_byname&); williamr@2: }; williamr@2: williamr@2: # endif williamr@2: williamr@2: _STLP_END_NAMESPACE williamr@2: williamr@2: #endif /* _STLP_INTERNAL_CODECVT_H */ williamr@2: williamr@2: // Local Variables: williamr@2: // mode:C++ williamr@2: // End: williamr@2: