diff -r e1b950c65cb4 -r 837f303aceeb epoc32/include/stdapis/stlportv5/stl/_codecvt.h --- a/epoc32/include/stdapis/stlportv5/stl/_codecvt.h Wed Mar 31 12:27:01 2010 +0100 +++ b/epoc32/include/stdapis/stlportv5/stl/_codecvt.h Wed Mar 31 12:33:34 2010 +0100 @@ -1,22 +1,22 @@ /* - * © Portions copyright (c) 2006-2007 Nokia Corporation. All rights reserved. + * Portions Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. * * Copyright (c) 1999 * Silicon Graphics Computer Systems, Inc. * - * Copyright (c) 1999 + * 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 + * 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. @@ -25,12 +25,17 @@ #ifndef _STLP_INTERNAL_CODECVT_H #define _STLP_INTERNAL_CODECVT_H -# ifndef _STLP_C_LOCALE_H +#ifndef _STLP_C_LOCALE_H # include -# endif -# ifndef _STLP_INTERNAL_LOCALE_H +#endif + +#ifndef _STLP_INTERNAL_LOCALE_H # include -# endif +#endif + +#ifndef _STLP_INTERNAL_ALGOBASE_H +# include +#endif _STLP_BEGIN_NAMESPACE @@ -41,37 +46,158 @@ template 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 { + 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 { + 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 { + 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(const state_type& __state, + const extern_type* __from, + const extern_type* __end, + size_t __max) const { + return do_length(__state, __from, __end, __max); + } + + int max_length() const _STLP_NOTHROW { return do_max_length(); } + +#if defined(__SYMBIAN32__WSD__) + static _STLP_STATIC_MEMBER_DECLSPEC locale::id& GetFacetLocaleId(); +#elif defined (__SYMBIAN32__NO_STATIC_IMPORTS__) + static _STLP_STATIC_MEMBER_DECLSPEC locale::id& GetFacetLocaleId(); + static locale::id id; +#else + // NOTE: Symbian doesn't support exporting static data. + // Users of this class should use GetFacetLocaleId() to access the data member id + static _STLP_STATIC_MEMBER_DECLSPEC locale::id id; +#endif + + +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(const 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&); + codecvt& operator = (const codecvt&); +}; + +# if defined (_STLP_EXPOSE_STREAM_IMPLEMENTATION) && !defined (_STLP_LINK_TIME_INSTANTIATION) +# if (_STLP_STATIC_TEMPLATE_DATA > 0) +# if !defined (__BORLANDC__) && !defined(__SYMBIAN32__WSD__) +template +locale::id codecvt<_InternT, _ExternT, _StateT>::id; +# endif +# endif +# endif +#endif + template class codecvt_byname : public codecvt<_InternT, _ExternT, _StateT> {}; _STLP_TEMPLATE_NULL -#ifdef __SYMBIAN32__ -class codecvt : public locale::facet, public codecvt_base -#else -class _STLP_CLASS_DECLSPEC codecvt : public locale::facet, public codecvt_base -#endif +class _STLP_CLASS_DECLSPEC codecvt + : public locale::facet, public codecvt_base { - friend class _Locale; + friend class _Locale_impl; + public: typedef char intern_type; typedef char extern_type; typedef mbstate_t state_type; - explicit codecvt(size_t __refs = 0) : _BaseFacet(__refs) {} + explicit codecvt(size_t __refs = 0) : locale::facet(__refs) {} - result out(state_type& __state, + result out(mbstate_t& __state, const char* __from, const char* __from_end, const char*& __from_next, char* __to, - char* __to_limit, + char* __to_limit, char*& __to_next) const { - return do_out(__state, + return do_out(__state, __from, __from_end, __from_next, __to, __to_limit, __to_next); } @@ -79,13 +205,13 @@ result unshift(mbstate_t& __state, char* __to, char* __to_limit, char*& __to_next) const { return do_unshift(__state, __to, __to_limit, __to_next); } - + result in(state_type& __state, const char* __from, - const char* __from_end, + const char* __from_end, const char*& __from_next, - char* __to, - char* __to_limit, + char* __to, + char* __to_limit, char*& __to_next) const { return do_in(__state, __from, __from_end, __from_next, @@ -100,17 +226,20 @@ const char* __from, const char* __end, size_t __max) const { return do_length(__state, __from, __end, __max); } - + int max_length() const _STLP_NOTHROW { return do_max_length(); } - -#if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_) - _STLP_STATIC_MEMBER_DECLSPEC static locale::id& GetFacetLocaleId(); +#if defined(__SYMBIAN32__WSD__) + static _STLP_STATIC_MEMBER_DECLSPEC locale::id& GetFacetLocaleId(); +#elif defined (__SYMBIAN32__NO_STATIC_IMPORTS__) + static _STLP_STATIC_MEMBER_DECLSPEC locale::id& GetFacetLocaleId(); + static locale::id id; #else - _STLP_STATIC_MEMBER_DECLSPEC static locale::id id; + // NOTE: Symbian doesn't support exporting static data. + // Users of this class should use GetFacetLocaleId() to access the data member id + static _STLP_STATIC_MEMBER_DECLSPEC locale::id id; #endif - protected: -_STLP_DECLSPEC ~codecvt(); + _STLP_DECLSPEC ~codecvt(); _STLP_DECLSPEC virtual result do_out(mbstate_t& /* __state */, const char* __from, @@ -120,7 +249,7 @@ char* /* __to_limit */, char*& __to_next) const; - _STLP_DECLSPEC virtual result do_in (mbstate_t& /* __state */ , + _STLP_DECLSPEC virtual result do_in (mbstate_t& /* __state */ , const char* __from, const char* /* __from_end */, const char*& __from_next, @@ -128,41 +257,38 @@ char* /* __to_end */, char*& __to_next) const; - _STLP_DECLSPEC virtual result do_unshift(mbstate_t& /* __state */, + _STLP_DECLSPEC virtual result do_unshift(mbstate_t& /* __state */, char* __to, char* /* __to_limit */, char*& __to_next) const; - _STLP_DECLSPEC virtual int do_encoding() const _STLP_NOTHROW; - _STLP_DECLSPEC virtual bool do_always_noconv() const _STLP_NOTHROW; - _STLP_DECLSPEC virtual int do_length(const mbstate_t& __state, - const char* __from, + _STLP_DECLSPEC virtual int do_encoding() const _STLP_NOTHROW; + _STLP_DECLSPEC virtual bool do_always_noconv() const _STLP_NOTHROW; + _STLP_DECLSPEC virtual int do_length(const mbstate_t& __state, + const char* __from, const char* __end, size_t __max) const; - _STLP_DECLSPEC virtual int do_max_length() const _STLP_NOTHROW; + _STLP_DECLSPEC virtual int do_max_length() const _STLP_NOTHROW; private: codecvt(const codecvt&); - codecvt& operator =(const codecvt&); + codecvt& operator =(const codecvt&); }; # ifndef _STLP_NO_WCHAR_T - + _STLP_TEMPLATE_NULL -#if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_) -class codecvt : public locale::facet, public codecvt_base -#else -class _STLP_CLASS_DECLSPEC codecvt : public locale::facet, public codecvt_base -#endif +class _STLP_CLASS_DECLSPEC codecvt + : public locale::facet, public codecvt_base { - friend class _Locale; + friend class _Locale_impl; public: typedef wchar_t intern_type; typedef char extern_type; typedef mbstate_t state_type; - explicit codecvt(size_t __refs = 0) : _BaseFacet(__refs) {} + explicit codecvt(size_t __refs = 0) : locale::facet(__refs) {} - result out(mbstate_t& __state, + result out(mbstate_t& __state, const wchar_t* __from, const wchar_t* __from_end, const wchar_t*& __from_next, @@ -170,7 +296,7 @@ char* __to_limit, char*& __to_next) const { return do_out(__state, - __from, __from_end, __from_next, + __from, __from_end, __from_next, __to, __to_limit, __to_next); } @@ -178,41 +304,43 @@ char* __to, char* __to_limit, char*& __to_next) const { return do_unshift(__state, __to, __to_limit, __to_next); } - - result in(mbstate_t& __state, + + result in(mbstate_t& __state, const char* __from, - const char* __from_end, + const char* __from_end, const char*& __from_next, - wchar_t* __to, - wchar_t* __to_limit, + wchar_t* __to, + wchar_t* __to_limit, wchar_t*& __to_next) const { - return do_in(__state, + return do_in(__state, __from, __from_end, __from_next, - __to, __to_limit, __to_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(const mbstate_t& __state, - const char* __from, - const char* __end, - size_t __max) const + int length(const mbstate_t& __state, + const char* __from, const char* __end, + size_t __max) const { return do_length(__state, __from, __end, __max); } - + int max_length() const _STLP_NOTHROW { return do_max_length(); } +#if defined(__SYMBIAN32__WSD__) + static _STLP_STATIC_MEMBER_DECLSPEC locale::id& GetFacetLocaleId(); +#elif defined (__SYMBIAN32__NO_STATIC_IMPORTS__) + static _STLP_STATIC_MEMBER_DECLSPEC locale::id& GetFacetLocaleId(); + static locale::id id; +#else + // NOTE: Symbian doesn't support exporting static data. + // Users of this class should use GetFacetLocaleId() to access the data member id + static _STLP_STATIC_MEMBER_DECLSPEC locale::id id; +#endif +protected: + _STLP_DECLSPEC ~codecvt(); -#if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_) - _STLP_STATIC_MEMBER_DECLSPEC static locale::id& GetFacetLocaleId(); -#else - _STLP_STATIC_MEMBER_DECLSPEC static locale::id id; -#endif - -protected: - _STLP_DECLSPEC ~codecvt(); - - _STLP_DECLSPEC virtual result do_out(mbstate_t& __state, + _STLP_DECLSPEC virtual result do_out(mbstate_t& __state, const wchar_t* __from, const wchar_t* __from_end, const wchar_t*& __from_next, @@ -220,7 +348,7 @@ char* __to_limit, char*& __to_next) const; - _STLP_DECLSPEC virtual result do_in (mbstate_t& __state, + _STLP_DECLSPEC virtual result do_in (mbstate_t& __state, const char* __from, const char* __from_end, const char*& __from_next, @@ -228,25 +356,25 @@ wchar_t* __to_limit, wchar_t*& __to_next) const; - _STLP_DECLSPEC virtual result do_unshift(mbstate_t& __state, - char* __to, + _STLP_DECLSPEC virtual result do_unshift(mbstate_t& __state, + char* __to, char* __to_limit, char*& __to_next) const; - _STLP_DECLSPEC virtual int do_encoding() const _STLP_NOTHROW; + _STLP_DECLSPEC virtual int do_encoding() const _STLP_NOTHROW; - _STLP_DECLSPEC virtual bool do_always_noconv() const _STLP_NOTHROW; - - _STLP_DECLSPEC virtual int do_length(const mbstate_t& __state, - const char* __from, + _STLP_DECLSPEC virtual bool do_always_noconv() const _STLP_NOTHROW; + + _STLP_DECLSPEC virtual int do_length(const mbstate_t& __state, + const char* __from, const char* __end, size_t __max) const; - _STLP_DECLSPEC virtual int do_max_length() const _STLP_NOTHROW; + _STLP_DECLSPEC virtual int do_max_length() const _STLP_NOTHROW; private: codecvt(const codecvt&); - codecvt& operator = (const codecvt&); + codecvt& operator = (const codecvt&); }; # endif @@ -255,25 +383,25 @@ class _STLP_CLASS_DECLSPEC codecvt_byname : public codecvt { public: - explicit _STLP_DECLSPEC codecvt_byname(const char* __name, size_t __refs = 0); - ~codecvt_byname(); + _STLP_DECLSPEC explicit codecvt_byname(const char* __name, size_t __refs = 0); + _STLP_DECLSPEC ~codecvt_byname(); private: codecvt_byname(const codecvt_byname&); - codecvt_byname& operator =(const codecvt_byname&); + codecvt_byname& operator =(const codecvt_byname&); }; # ifndef _STLP_NO_WCHAR_T _STLP_TEMPLATE_NULL -class codecvt_byname - : public codecvt +class _STLP_CLASS_DECLSPEC codecvt_byname + : public codecvt { public: - explicit _STLP_DECLSPEC codecvt_byname(const char * __name, size_t __refs = 0); + _STLP_DECLSPEC explicit codecvt_byname(const char * __name, size_t __refs = 0, _Locale_name_hint* __hint = 0); protected: - _STLP_DECLSPEC ~codecvt_byname(); + _STLP_DECLSPEC ~codecvt_byname(); - _STLP_DECLSPEC virtual result do_out(mbstate_t& __state, + _STLP_DECLSPEC virtual result do_out(mbstate_t& __state, const wchar_t* __from, const wchar_t* __from_end, const wchar_t*& __from_next, @@ -281,7 +409,7 @@ char* __to_limit, char*& __to_next) const; - _STLP_DECLSPEC virtual result do_in (mbstate_t& __state, + _STLP_DECLSPEC virtual result do_in (mbstate_t& __state, const char* __from, const char* __from_end, const char*& __from_next, @@ -289,26 +417,26 @@ wchar_t* __to_limit, wchar_t*& __to_next) const; - _STLP_DECLSPEC virtual result do_unshift(mbstate_t& __state, - char* __to, + _STLP_DECLSPEC virtual result do_unshift(mbstate_t& __state, + char* __to, char* __to_limit, char*& __to_next) const; - _STLP_DECLSPEC virtual int do_encoding() const _STLP_NOTHROW; + _STLP_DECLSPEC virtual int do_encoding() const _STLP_NOTHROW; - _STLP_DECLSPEC virtual bool do_always_noconv() const _STLP_NOTHROW; - - _STLP_DECLSPEC virtual int do_length(const mbstate_t& __state, - const char* __from, + _STLP_DECLSPEC virtual bool do_always_noconv() const _STLP_NOTHROW; + + _STLP_DECLSPEC virtual int do_length(const mbstate_t& __state, + const char* __from, const char* __end, size_t __max) const; - _STLP_DECLSPEC virtual int do_max_length() const _STLP_NOTHROW; + _STLP_DECLSPEC virtual int do_max_length() const _STLP_NOTHROW; private: _Locale_ctype* _M_ctype; codecvt_byname(const codecvt_byname&); - codecvt_byname& operator =(const codecvt_byname&); + codecvt_byname& operator =(const codecvt_byname&); }; # endif