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_NUMPUNCT_H williamr@2: #define _STLP_INTERNAL_NUMPUNCT_H williamr@2: williamr@2: #ifndef _STLP_IOS_BASE_H williamr@2: # include williamr@2: #endif williamr@2: williamr@2: # ifndef _STLP_C_LOCALE_H williamr@2: # include williamr@2: # endif williamr@2: williamr@2: #ifndef _STLP_STRING_H williamr@2: # include williamr@2: #endif williamr@2: williamr@2: _STLP_BEGIN_NAMESPACE williamr@2: williamr@2: //---------------------------------------------------------------------- williamr@2: // numpunct facets williamr@2: williamr@2: #ifdef __SYMBIAN32__ williamr@2: extern locale::id& Numpunct_charT_GetFacetLocaleId(const char* type); williamr@2: williamr@2: template class numpunct: public locale::facet williamr@2: { williamr@2: friend class _Locale; williamr@2: public: williamr@2: typedef char char_type; williamr@2: typedef basic_string<_CharT> string_type; williamr@2: explicit numpunct(size_t __refs = 0) : _BaseFacet(__refs) { williamr@2: _M_truename.append(1, (_CharT)'t'); williamr@2: _M_truename.append(1, (_CharT)'r'); williamr@2: _M_truename.append(1, (_CharT)'u'); williamr@2: _M_truename.append(1, (_CharT)'e'); williamr@2: williamr@2: _M_falsename.append(1, (_CharT)'f'); williamr@2: _M_falsename.append(1, (_CharT)'a'); williamr@2: _M_falsename.append(1, (_CharT)'l'); williamr@2: _M_falsename.append(1, (_CharT)'s'); williamr@2: _M_falsename.append(1, (_CharT)'e'); williamr@2: } williamr@2: williamr@2: _CharT decimal_point() const { return do_decimal_point(); } williamr@2: _CharT thousands_sep() const { return do_thousands_sep(); } williamr@2: string grouping() const { return do_grouping(); } williamr@2: string_type truename() const { return do_truename(); } williamr@2: string_type falsename() const { return do_falsename(); } williamr@2: #if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_) williamr@2: static locale::id& GetFacetLocaleId(){return Numpunct_charT_GetFacetLocaleId(typeid(_CharT).name()); } williamr@2: #else williamr@2: static locale::id id; williamr@2: #endif williamr@2: williamr@2: # ifndef _STLP_NO_FRIEND_TEMPLATES williamr@2: protected: williamr@2: # endif williamr@2: ~numpunct(); williamr@2: williamr@2: protected: williamr@2: static string_type _M_truename; williamr@2: static string_type _M_falsename; williamr@2: static string _M_grouping; williamr@2: protected: williamr@2: williamr@2: virtual _CharT do_decimal_point() const; williamr@2: virtual _CharT do_thousands_sep() const; williamr@2: virtual string do_grouping() const; williamr@2: virtual string_type do_truename() const; williamr@2: virtual string_type do_falsename() const; williamr@2: }; williamr@2: williamr@2: template williamr@2: basic_string<_CharT> numpunct<_CharT>::_M_truename; williamr@2: template williamr@2: basic_string<_CharT> numpunct<_CharT>::_M_falsename; williamr@2: template williamr@2: string numpunct<_CharT>::_M_grouping ; williamr@2: williamr@2: _STLP_DECLSPEC _Locale_numeric* __acquire_numericE(const char* ); williamr@2: _STLP_DECLSPEC void __release_numericE(_Locale_numeric* ); williamr@2: _STLP_DECLSPEC const char* _Locale_trueE(_Locale_numeric*); williamr@2: _STLP_DECLSPEC const char* _Locale_falseE(_Locale_numeric*); williamr@2: _STLP_DECLSPEC char _Locale_decimal_pointE(_Locale_numeric*); williamr@2: _STLP_DECLSPEC char _Locale_thousands_sepE(_Locale_numeric*); williamr@2: _STLP_DECLSPEC const char*_Locale_groupingE(_Locale_numeric*); williamr@2: williamr@2: template williamr@2: class numpunct_byname : public numpunct<_CharT>{ williamr@2: public: williamr@2: typedef _CharT char_type; williamr@2: typedef basic_string<_CharT> string_type; williamr@2: williamr@2: explicit numpunct_byname(const char* name, size_t refs = 0); williamr@2: protected: williamr@2: williamr@2: ~numpunct_byname(); williamr@2: williamr@2: virtual _CharT do_decimal_point() const; williamr@2: virtual _CharT do_thousands_sep() const; williamr@2: virtual string do_grouping() const; williamr@2: williamr@2: private: williamr@2: _Locale_numeric* _M_numeric; williamr@2: }; williamr@2: williamr@2: #else williamr@2: template class numpunct {}; williamr@2: template class numpunct_byname {}; williamr@2: #endif williamr@2: template class num_get; williamr@2: williamr@2: _STLP_TEMPLATE_NULL williamr@2: #ifdef __SYMBIAN32__ williamr@2: class numpunct : public locale::facet williamr@2: #else williamr@2: class _STLP_CLASS_DECLSPEC numpunct : public locale::facet williamr@2: #endif williamr@2: { williamr@2: friend class _Locale; williamr@2: # ifndef _STLP_NO_FRIEND_TEMPLATES williamr@2: template friend class num_get; williamr@2: # endif williamr@2: public: williamr@2: typedef char char_type; williamr@2: typedef string string_type; williamr@2: williamr@2: explicit numpunct(size_t __refs = 0) : _BaseFacet(__refs) {} williamr@2: williamr@2: char decimal_point() const { return do_decimal_point(); } williamr@2: char thousands_sep() const { return do_thousands_sep(); } williamr@2: string grouping() const { return do_grouping(); } williamr@2: string truename() const { return do_truename(); } williamr@2: string falsename() const { return do_falsename(); } 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: # ifndef _STLP_NO_FRIEND_TEMPLATES williamr@2: protected: williamr@2: # endif williamr@2: ~numpunct(){}; williamr@2: williamr@2: #if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_) williamr@2: public: williamr@2: _STLP_STATIC_MEMBER_DECLSPEC static string& GetNumPunct_M_truename(); williamr@2: _STLP_STATIC_MEMBER_DECLSPEC static string& GetNumPunct_M_falsename(); williamr@2: _STLP_STATIC_MEMBER_DECLSPEC static string& GetNumPunct_M_grouping(); williamr@2: #else williamr@2: protected: williamr@2: _STLP_STATIC_MEMBER_DECLSPEC static string _M_truename; williamr@2: _STLP_STATIC_MEMBER_DECLSPEC static string _M_falsename; williamr@2: _STLP_STATIC_MEMBER_DECLSPEC static string _M_grouping; williamr@2: #endif williamr@2: williamr@2: protected: williamr@2: williamr@2: _STLP_DECLSPEC virtual char do_decimal_point() const; williamr@2: _STLP_DECLSPEC virtual char do_thousands_sep() const; williamr@2: _STLP_DECLSPEC virtual string do_grouping() const; williamr@2: _STLP_DECLSPEC virtual string do_truename() const; williamr@2: _STLP_DECLSPEC virtual string do_falsename() const; williamr@2: }; williamr@2: williamr@2: # if ! defined (_STLP_NO_WCHAR_T) williamr@2: williamr@2: _STLP_TEMPLATE_NULL williamr@2: #ifdef __SYMBIAN32__ williamr@2: class numpunct : public locale::facet williamr@2: #else williamr@2: class _STLP_CLASS_DECLSPEC numpunct : public locale::facet williamr@2: #endif williamr@2: { williamr@2: friend class _Locale; williamr@2: public: williamr@2: typedef wchar_t char_type; williamr@2: typedef wstring string_type; williamr@2: williamr@2: explicit numpunct(size_t __refs = 0) : _BaseFacet(__refs) {} williamr@2: williamr@2: wchar_t decimal_point() const { return do_decimal_point(); } williamr@2: wchar_t thousands_sep() const { return do_thousands_sep(); } williamr@2: string grouping() const { return do_grouping(); } williamr@2: wstring truename() const { return do_truename(); } williamr@2: wstring falsename() const { return do_falsename(); } 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: #if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_) williamr@2: public: williamr@2: _STLP_STATIC_MEMBER_DECLSPEC static wstring& GetNumPunct_M_Wchar_truename(); williamr@2: _STLP_STATIC_MEMBER_DECLSPEC static wstring& GetNumPunct_M_Wchar_falsename(); williamr@2: _STLP_STATIC_MEMBER_DECLSPEC static string& GetNumPunct_M_Wchar_grouping(); williamr@2: #else williamr@2: protected: williamr@2: _STLP_STATIC_MEMBER_DECLSPEC static wstring _M_truename; williamr@2: _STLP_STATIC_MEMBER_DECLSPEC static wstring _M_falsename; williamr@2: _STLP_STATIC_MEMBER_DECLSPEC static string _M_grouping; williamr@2: #endif williamr@2: protected: williamr@2: ~numpunct() {} williamr@2: williamr@2: _STLP_DECLSPEC virtual wchar_t do_decimal_point() const; williamr@2: _STLP_DECLSPEC virtual wchar_t do_thousands_sep() const; williamr@2: _STLP_DECLSPEC virtual string do_grouping() const; williamr@2: _STLP_DECLSPEC virtual wstring do_truename() const; williamr@2: _STLP_DECLSPEC virtual wstring do_falsename() const; williamr@2: }; williamr@2: williamr@2: # endif /* WCHAR_T */ williamr@2: williamr@2: _STLP_TEMPLATE_NULL williamr@2: class _STLP_CLASS_DECLSPEC numpunct_byname : public numpunct { williamr@2: public: williamr@2: typedef char char_type; williamr@2: typedef string string_type; williamr@2: williamr@2: explicit _STLP_DECLSPEC numpunct_byname(const char* __name, size_t __refs = 0); williamr@2: williamr@2: protected: williamr@2: williamr@2: _STLP_DECLSPEC ~numpunct_byname(); williamr@2: williamr@2: _STLP_DECLSPEC virtual char do_decimal_point() const; williamr@2: _STLP_DECLSPEC virtual char do_thousands_sep() const; williamr@2: _STLP_DECLSPEC virtual string do_grouping() const; williamr@2: williamr@2: private: williamr@2: _Locale_numeric* _M_numeric; williamr@2: }; williamr@2: williamr@2: # ifndef _STLP_NO_WCHAR_T williamr@2: _STLP_TEMPLATE_NULL williamr@2: class _STLP_CLASS_DECLSPEC numpunct_byname: public numpunct { williamr@2: public: williamr@2: typedef wchar_t char_type; williamr@2: typedef wstring string_type; williamr@2: williamr@2: explicit _STLP_DECLSPEC numpunct_byname(const char* __name, size_t __refs = 0); williamr@2: williamr@2: protected: williamr@2: williamr@2: _STLP_DECLSPEC ~numpunct_byname(); williamr@2: williamr@2: _STLP_DECLSPEC virtual wchar_t do_decimal_point() const; williamr@2: _STLP_DECLSPEC virtual wchar_t do_thousands_sep() const; williamr@2: _STLP_DECLSPEC virtual string do_grouping() const; williamr@2: williamr@2: private: williamr@2: _Locale_numeric* _M_numeric; williamr@2: }; williamr@2: williamr@2: # endif /* WCHAR_T */ williamr@2: williamr@2: #ifdef __SYMBIAN32__ williamr@2: #include williamr@2: #endif williamr@2: _STLP_END_NAMESPACE williamr@2: williamr@2: #endif /* _STLP_NUMPUNCT_H */ williamr@2: williamr@2: // Local Variables: williamr@2: // mode:C++ williamr@2: // End: williamr@2: