1 /* 2 * Copyright (c) 1999 3 * Silicon Graphics Computer Systems, Inc. 4 * 5 * Copyright (c) 1999 6 * Boris Fomitchev 7 * 8 * This material is provided "as is", with absolutely no warranty expressed 9 * or implied. Any use is at your own risk. 10 * 11 * Permission to use or copy this software for any purpose is hereby granted 12 * without fee, provided the above notices are retained on all copies. 13 * Permission to modify the code and to distribute modified code is granted, 14 * provided the above notices are retained, and a notice that the code was 15 * modified is included with the above copyright notice. 16 * 17 */ 18 // WARNING: This is an internal header file, included by other C++ 19 // standard library headers. You should not attempt to use this header 20 // file directly. 21 22 23 #ifndef _STLP_INTERNAL_NUMPUNCT_H 24 #define _STLP_INTERNAL_NUMPUNCT_H 25 26 #ifndef _STLP_IOS_BASE_H 27 # include <stl/_ios_base.h> 28 #endif 29 30 # ifndef _STLP_C_LOCALE_H 31 # include <stl/c_locale.h> 32 # endif 33 34 #ifndef _STLP_INTERNAL_STRING_H 35 # include <stl/_string.h> 36 #endif 37 38 _STLP_BEGIN_NAMESPACE 39 40 //---------------------------------------------------------------------- 41 // numpunct facets 42 43 template <class _CharT> class numpunct {}; 44 template <class _CharT> class numpunct_byname {}; 45 template <class _Ch, class _InIt> class num_get; 46 47 _STLP_TEMPLATE_NULL 48 class _STLP_CLASS_DECLSPEC numpunct<char> : public locale::facet { 49 public: 50 typedef char char_type; 51 typedef string string_type; 52 53 explicit numpunct(size_t __refs = 0) facet(__refs)54 : locale::facet(__refs) {} 55 decimal_point()56 char decimal_point() const { return do_decimal_point(); } thousands_sep()57 char thousands_sep() const { return do_thousands_sep(); } grouping()58 string grouping() const { return do_grouping(); } truename()59 string truename() const { return do_truename(); } falsename()60 string falsename() const { return do_falsename(); } 61 62 static _STLP_STATIC_DECLSPEC locale::id id; 63 64 protected: 65 ~numpunct(); 66 67 virtual char do_decimal_point() const; 68 virtual char do_thousands_sep() const; 69 virtual string do_grouping() const; 70 virtual string do_truename() const; 71 virtual string do_falsename() const; 72 }; 73 74 # if ! defined (_STLP_NO_WCHAR_T) 75 76 _STLP_TEMPLATE_NULL 77 class _STLP_CLASS_DECLSPEC numpunct<wchar_t> : public locale::facet { 78 public: 79 typedef wchar_t char_type; 80 typedef wstring string_type; 81 82 explicit numpunct(size_t __refs = 0) facet(__refs)83 : locale::facet(__refs) {} 84 decimal_point()85 wchar_t decimal_point() const { return do_decimal_point(); } thousands_sep()86 wchar_t thousands_sep() const { return do_thousands_sep(); } grouping()87 string grouping() const { return do_grouping(); } truename()88 wstring truename() const { return do_truename(); } falsename()89 wstring falsename() const { return do_falsename(); } 90 91 static _STLP_STATIC_DECLSPEC locale::id id; 92 93 protected: 94 ~numpunct(); 95 96 virtual wchar_t do_decimal_point() const; 97 virtual wchar_t do_thousands_sep() const; 98 virtual string do_grouping() const; 99 virtual wstring do_truename() const; 100 virtual wstring do_falsename() const; 101 }; 102 103 # endif /* WCHAR_T */ 104 105 _STLP_TEMPLATE_NULL 106 class _STLP_CLASS_DECLSPEC numpunct_byname<char> : public numpunct<char> { 107 friend class _Locale_impl; 108 public: 109 typedef char char_type; 110 typedef string string_type; 111 112 explicit numpunct_byname(const char* __name, size_t __refs = 0); 113 114 protected: 115 116 ~numpunct_byname(); 117 118 virtual char do_decimal_point() const; 119 virtual char do_thousands_sep() const; 120 virtual string do_grouping() const; 121 virtual string do_truename() const; 122 virtual string do_falsename() const; 123 124 private: numpunct_byname(_Locale_numeric * __numeric)125 numpunct_byname(_Locale_numeric *__numeric) 126 : _M_numeric(__numeric) {} 127 128 //explicitely defined as private to avoid warnings: 129 typedef numpunct_byname<char> _Self; 130 numpunct_byname(_Self const&); 131 _Self& operator = (_Self const&); 132 133 _Locale_numeric* _M_numeric; 134 }; 135 136 # ifndef _STLP_NO_WCHAR_T 137 _STLP_TEMPLATE_NULL 138 class _STLP_CLASS_DECLSPEC numpunct_byname<wchar_t>: public numpunct<wchar_t> { 139 friend class _Locale_impl; 140 public: 141 typedef wchar_t char_type; 142 typedef wstring string_type; 143 144 explicit numpunct_byname(const char* __name, size_t __refs = 0); 145 146 protected: 147 ~numpunct_byname(); 148 149 virtual wchar_t do_decimal_point() const; 150 virtual wchar_t do_thousands_sep() const; 151 virtual string do_grouping() const; 152 virtual wstring do_truename() const; 153 virtual wstring do_falsename() const; 154 155 private: numpunct_byname(_Locale_numeric * __numeric)156 numpunct_byname(_Locale_numeric *__numeric) 157 : _M_numeric(__numeric) {} 158 159 //explicitely defined as private to avoid warnings: 160 typedef numpunct_byname<wchar_t> _Self; 161 numpunct_byname(_Self const&); 162 _Self& operator = (_Self const&); 163 164 _Locale_numeric* _M_numeric; 165 }; 166 167 # endif /* WCHAR_T */ 168 169 _STLP_END_NAMESPACE 170 171 #endif /* _STLP_NUMPUNCT_H */ 172 173 // Local Variables: 174 // mode:C++ 175 // End: 176 177