epoc32/include/stdapis/stlport/stl/_numpunct.h
branchSymbian3
changeset 4 837f303aceeb
equal deleted inserted replaced
3:e1b950c65cb4 4:837f303aceeb
       
     1 /*
       
     2  * © Portions copyright (c) 2006-2007 Nokia Corporation.  All rights reserved.
       
     3  *
       
     4  * Copyright (c) 1999
       
     5  * Silicon Graphics Computer Systems, Inc.
       
     6  *
       
     7  * Copyright (c) 1999 
       
     8  * Boris Fomitchev
       
     9  *
       
    10  * This material is provided "as is", with absolutely no warranty expressed
       
    11  * or implied. Any use is at your own risk.
       
    12  *
       
    13  * Permission to use or copy this software for any purpose is hereby granted 
       
    14  * without fee, provided the above notices are retained on all copies.
       
    15  * Permission to modify the code and to distribute modified code is granted,
       
    16  * provided the above notices are retained, and a notice that the code was
       
    17  * modified is included with the above copyright notice.
       
    18  *
       
    19  */ 
       
    20 // WARNING: This is an internal header file, included by other C++
       
    21 // standard library headers.  You should not attempt to use this header
       
    22 // file directly.
       
    23 
       
    24 
       
    25 #ifndef _STLP_INTERNAL_NUMPUNCT_H
       
    26 #define _STLP_INTERNAL_NUMPUNCT_H
       
    27 
       
    28 #ifndef _STLP_IOS_BASE_H
       
    29 # include <stl/_ios_base.h>
       
    30 #endif
       
    31 
       
    32 # ifndef _STLP_C_LOCALE_H
       
    33 #  include <stl/c_locale.h>
       
    34 # endif
       
    35 
       
    36 #ifndef _STLP_STRING_H
       
    37 # include <stl/_string.h>
       
    38 #endif
       
    39 
       
    40 _STLP_BEGIN_NAMESPACE
       
    41 
       
    42 //----------------------------------------------------------------------
       
    43 // numpunct facets
       
    44 
       
    45 #ifdef	__SYMBIAN32__
       
    46 extern locale::id& Numpunct_charT_GetFacetLocaleId(const char* type);
       
    47 
       
    48 template <class _CharT> class numpunct: public locale::facet
       
    49 {
       
    50 	friend class _Locale;
       
    51 public:
       
    52  	typedef char               		char_type;
       
    53   	typedef basic_string<_CharT>             string_type;
       
    54 	explicit numpunct(size_t __refs = 0) : _BaseFacet(__refs) {
       
    55 	_M_truename.append(1, (_CharT)'t');
       
    56 	_M_truename.append(1, (_CharT)'r');
       
    57 	_M_truename.append(1, (_CharT)'u');
       
    58 	_M_truename.append(1, (_CharT)'e');
       
    59 
       
    60 	_M_falsename.append(1, (_CharT)'f');
       
    61 	_M_falsename.append(1, (_CharT)'a');
       
    62 	_M_falsename.append(1, (_CharT)'l');
       
    63 	_M_falsename.append(1, (_CharT)'s');
       
    64 	_M_falsename.append(1, (_CharT)'e');
       
    65 	}
       
    66 	
       
    67   	_CharT decimal_point() const { return do_decimal_point(); }
       
    68   	_CharT thousands_sep() const { return do_thousands_sep(); }
       
    69   	string grouping() const { return do_grouping(); }
       
    70   	string_type truename() const { return do_truename(); }
       
    71   	string_type falsename() const { return do_falsename(); }
       
    72 #if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_)
       
    73 	static locale::id& GetFacetLocaleId(){return Numpunct_charT_GetFacetLocaleId(typeid(_CharT).name()); }
       
    74 #else
       
    75   	 static locale::id id;
       
    76 #endif
       
    77 
       
    78 # ifndef _STLP_NO_FRIEND_TEMPLATES
       
    79 protected:
       
    80 # endif
       
    81 	~numpunct();
       
    82 
       
    83 protected:
       
    84   	 static string_type  _M_truename;
       
    85   	static string_type  _M_falsename;
       
    86   	static string  _M_grouping;
       
    87 protected:
       
    88 
       
    89   	virtual _CharT do_decimal_point() const;
       
    90   	virtual _CharT do_thousands_sep() const;
       
    91   	virtual string do_grouping() const; 
       
    92   	virtual string_type do_truename() const;
       
    93   	virtual string_type do_falsename()  const;
       
    94 };
       
    95 
       
    96 template <class _CharT>
       
    97 basic_string<_CharT> numpunct<_CharT>::_M_truename;
       
    98 template <class _CharT>
       
    99 basic_string<_CharT> numpunct<_CharT>::_M_falsename;
       
   100 template <class _CharT>
       
   101 string numpunct<_CharT>::_M_grouping ;
       
   102 
       
   103 _STLP_DECLSPEC _Locale_numeric* __acquire_numericE(const char* );
       
   104 _STLP_DECLSPEC void __release_numericE(_Locale_numeric* );
       
   105 _STLP_DECLSPEC const char* _Locale_trueE(_Locale_numeric*);
       
   106 _STLP_DECLSPEC const char* _Locale_falseE(_Locale_numeric*);
       
   107 _STLP_DECLSPEC char _Locale_decimal_pointE(_Locale_numeric*);
       
   108 _STLP_DECLSPEC char _Locale_thousands_sepE(_Locale_numeric*);
       
   109 _STLP_DECLSPEC const char*_Locale_groupingE(_Locale_numeric*);
       
   110 
       
   111 template <class _CharT>
       
   112 class numpunct_byname : public numpunct<_CharT>{
       
   113 public:
       
   114 	typedef _CharT                char_type;
       
   115   	typedef basic_string<_CharT>              string_type;
       
   116 
       
   117   	explicit  numpunct_byname(const char* name, size_t refs = 0);	
       
   118 protected:
       
   119 
       
   120 	   ~numpunct_byname();
       
   121 
       
   122 	 virtual _CharT   do_decimal_point() const;
       
   123   	 virtual _CharT   do_thousands_sep() const;
       
   124 	  virtual string do_grouping()      const;
       
   125 
       
   126 private:
       
   127   	_Locale_numeric* _M_numeric;
       
   128 };
       
   129 
       
   130 #else
       
   131 template <class _CharT> class numpunct {};
       
   132 template <class _CharT> class numpunct_byname {};
       
   133 #endif
       
   134 template <class _Ch, class _InIt> class num_get;
       
   135 
       
   136 _STLP_TEMPLATE_NULL
       
   137 #ifdef __SYMBIAN32__
       
   138 class numpunct <char> : public locale::facet
       
   139 #else
       
   140 class _STLP_CLASS_DECLSPEC numpunct<char> : public locale::facet
       
   141 #endif
       
   142 {
       
   143   friend class _Locale;
       
   144 # ifndef _STLP_NO_FRIEND_TEMPLATES
       
   145   template <class _Ch, class _InIt> friend class num_get;
       
   146 # endif
       
   147 public:
       
   148   typedef char               char_type;
       
   149   typedef string             string_type;
       
   150 
       
   151   explicit numpunct(size_t __refs = 0) : _BaseFacet(__refs) {}
       
   152 
       
   153   char decimal_point() const { return do_decimal_point(); }
       
   154   char thousands_sep() const { return do_thousands_sep(); }
       
   155   string grouping() const { return do_grouping(); }
       
   156   string truename() const { return do_truename(); }
       
   157   string falsename() const { return do_falsename(); }
       
   158 
       
   159 #if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_)
       
   160 	_STLP_STATIC_MEMBER_DECLSPEC static locale::id& GetFacetLocaleId();
       
   161 #else
       
   162   	_STLP_STATIC_MEMBER_DECLSPEC static locale::id id;
       
   163 #endif
       
   164 
       
   165 # ifndef _STLP_NO_FRIEND_TEMPLATES
       
   166 protected:
       
   167 # endif
       
   168   ~numpunct(){};
       
   169 
       
   170 #if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_)
       
   171 public:
       
   172   _STLP_STATIC_MEMBER_DECLSPEC static string&  GetNumPunct_M_truename();
       
   173   _STLP_STATIC_MEMBER_DECLSPEC static string&  GetNumPunct_M_falsename();
       
   174   _STLP_STATIC_MEMBER_DECLSPEC static string&  GetNumPunct_M_grouping();
       
   175 #else
       
   176 protected:
       
   177   _STLP_STATIC_MEMBER_DECLSPEC static string  _M_truename;
       
   178   _STLP_STATIC_MEMBER_DECLSPEC static string  _M_falsename;
       
   179   _STLP_STATIC_MEMBER_DECLSPEC static string  _M_grouping;
       
   180 #endif
       
   181 
       
   182 protected:
       
   183 
       
   184   _STLP_DECLSPEC virtual char do_decimal_point() const;
       
   185   _STLP_DECLSPEC virtual char do_thousands_sep() const;
       
   186   _STLP_DECLSPEC virtual string do_grouping() const;
       
   187   _STLP_DECLSPEC virtual string do_truename() const;
       
   188   _STLP_DECLSPEC virtual string do_falsename()  const;
       
   189 };
       
   190 
       
   191 # if ! defined (_STLP_NO_WCHAR_T)
       
   192 
       
   193 _STLP_TEMPLATE_NULL
       
   194 #ifdef __SYMBIAN32__
       
   195 class numpunct<wchar_t> : public locale::facet
       
   196 #else
       
   197 class _STLP_CLASS_DECLSPEC numpunct<wchar_t> : public locale::facet
       
   198 #endif
       
   199 {
       
   200   friend class _Locale;
       
   201 public:
       
   202   typedef wchar_t               char_type;
       
   203   typedef wstring               string_type;
       
   204 
       
   205   explicit numpunct(size_t __refs = 0) : _BaseFacet(__refs) {}
       
   206 
       
   207   wchar_t decimal_point() const { return do_decimal_point(); }
       
   208   wchar_t thousands_sep() const { return do_thousands_sep(); }
       
   209   string grouping() const { return do_grouping(); }
       
   210   wstring truename() const { return do_truename(); }
       
   211   wstring falsename() const { return do_falsename(); }
       
   212 
       
   213 #if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_)
       
   214     _STLP_STATIC_MEMBER_DECLSPEC static locale::id& GetFacetLocaleId();
       
   215 #else
       
   216  	_STLP_STATIC_MEMBER_DECLSPEC static locale::id id;
       
   217 #endif
       
   218 
       
   219 #if defined(__LIBSTD_CPP_SYMBIAN32_WSD__) || defined(_STLP_LIBSTD_CPP_NO_STATIC_VAR_)
       
   220 public:
       
   221   _STLP_STATIC_MEMBER_DECLSPEC static wstring&  GetNumPunct_M_Wchar_truename();
       
   222   _STLP_STATIC_MEMBER_DECLSPEC static wstring&  GetNumPunct_M_Wchar_falsename();
       
   223   _STLP_STATIC_MEMBER_DECLSPEC static string&  GetNumPunct_M_Wchar_grouping();
       
   224 #else
       
   225 protected:
       
   226   _STLP_STATIC_MEMBER_DECLSPEC static wstring _M_truename;
       
   227   _STLP_STATIC_MEMBER_DECLSPEC static wstring _M_falsename;
       
   228   _STLP_STATIC_MEMBER_DECLSPEC static string _M_grouping;
       
   229 #endif
       
   230 protected:
       
   231   ~numpunct() {}
       
   232 
       
   233   _STLP_DECLSPEC virtual wchar_t do_decimal_point() const;
       
   234   _STLP_DECLSPEC virtual wchar_t do_thousands_sep() const;
       
   235   _STLP_DECLSPEC virtual string do_grouping() const;
       
   236   _STLP_DECLSPEC virtual wstring do_truename() const;
       
   237   _STLP_DECLSPEC virtual wstring do_falsename()  const;
       
   238 };
       
   239 
       
   240 # endif /* WCHAR_T */
       
   241 
       
   242 _STLP_TEMPLATE_NULL
       
   243 class _STLP_CLASS_DECLSPEC numpunct_byname<char> : public numpunct<char> {
       
   244 public:
       
   245   typedef char                char_type;
       
   246   typedef string              string_type;
       
   247 
       
   248   explicit _STLP_DECLSPEC numpunct_byname(const char* __name, size_t __refs = 0);
       
   249 
       
   250 protected:
       
   251 
       
   252 _STLP_DECLSPEC   ~numpunct_byname();
       
   253 
       
   254 _STLP_DECLSPEC   virtual char   do_decimal_point() const;
       
   255   _STLP_DECLSPEC virtual char   do_thousands_sep() const;
       
   256 _STLP_DECLSPEC   virtual string do_grouping()      const;
       
   257 
       
   258 private:
       
   259   _Locale_numeric* _M_numeric;
       
   260 };
       
   261 
       
   262 # ifndef _STLP_NO_WCHAR_T
       
   263 _STLP_TEMPLATE_NULL
       
   264 class _STLP_CLASS_DECLSPEC numpunct_byname<wchar_t>: public numpunct<wchar_t> {
       
   265 public:
       
   266   typedef wchar_t               char_type;
       
   267   typedef wstring               string_type;
       
   268 
       
   269   explicit _STLP_DECLSPEC numpunct_byname(const char* __name, size_t __refs = 0);
       
   270 
       
   271 protected:
       
   272 
       
   273 _STLP_DECLSPEC   ~numpunct_byname();
       
   274 
       
   275 _STLP_DECLSPEC   virtual wchar_t   do_decimal_point() const;
       
   276   _STLP_DECLSPEC virtual wchar_t   do_thousands_sep() const;
       
   277 _STLP_DECLSPEC   virtual string do_grouping() const;
       
   278 
       
   279 private:
       
   280   _Locale_numeric* _M_numeric;
       
   281 };
       
   282 
       
   283 # endif /* WCHAR_T */
       
   284 
       
   285 #ifdef	__SYMBIAN32__
       
   286 #include<stl/_numpunct.c>
       
   287 #endif
       
   288 _STLP_END_NAMESPACE
       
   289 
       
   290 #endif /* _STLP_NUMPUNCT_H */
       
   291 
       
   292 // Local Variables:
       
   293 // mode:C++
       
   294 // End:
       
   295