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