2001-08-03 Daniel Berlin <dan@cgsoftware.com>
[official-gcc.git] / libstdc++-v3 / src / locale-inst.cc
blob0b9cf7564ea37128d2c2677a765a79595a876c59
1 // Locale support -*- C++ -*-
3 // Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
4 //
5 // This file is part of the GNU ISO C++ Library. This library is free
6 // software; you can redistribute it and/or modify it under the
7 // terms of the GNU General Public License as published by the
8 // Free Software Foundation; either version 2, or (at your option)
9 // any later version.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
16 // You should have received a copy of the GNU General Public License along
17 // with this library; see the file COPYING. If not, write to the Free
18 // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
19 // USA.
21 // As a special exception, you may use this file as part of a free software
22 // library without restriction. Specifically, if other files instantiate
23 // templates or use macros or inline functions from this file, or you compile
24 // this file and link it with other files to produce an executable, this
25 // file does not by itself cause the resulting executable to be covered by
26 // the GNU General Public License. This exception does not however
27 // invalidate any other reasons why the executable file might be covered by
28 // the GNU General Public License.
31 // ISO C++ 14882: 22.1 Locales
34 #include <bits/std_clocale.h>
35 #include <bits/std_cstring.h>
36 #include <bits/std_cassert.h>
37 #include <bits/std_limits.h>
38 #include <exception>
39 #include <bits/std_stdexcept.h>
40 #include <bits/std_locale.h>
41 #include <bits/locale_facets.tcc>
42 #include <bits/std_istream.h>
43 #include <bits/std_ostream.h>
45 namespace std
47 typedef ostreambuf_iterator<char, char_traits<char> > obuf_iterator;
48 typedef istreambuf_iterator<char, char_traits<char> > ibuf_iterator;
49 typedef ostreambuf_iterator<wchar_t, char_traits<wchar_t> > wobuf_iterator;
50 typedef istreambuf_iterator<wchar_t, char_traits<wchar_t> > wibuf_iterator;
52 // moneypunct, money_get, and money_put
53 template class moneypunct<char, false>;
54 template class moneypunct<char, true>;
55 template class moneypunct_byname<char, false>;
56 template class moneypunct_byname<char, true>;
57 template class money_get<char, obuf_iterator>;
58 template class money_put<char, obuf_iterator>;
59 template class money_get<char, ibuf_iterator>;
60 template class money_put<char, ibuf_iterator>;
61 template class _Format_cache<char>;
63 #ifdef _GLIBCPP_USE_WCHAR_T
64 template class moneypunct<wchar_t, false>;
65 template class moneypunct<wchar_t, true>;
66 template class moneypunct_byname<wchar_t, false>;
67 template class moneypunct_byname<wchar_t, true>;
68 template class money_get<wchar_t, wobuf_iterator>;
69 template class money_put<wchar_t, wobuf_iterator>;
70 template class money_get<wchar_t, wibuf_iterator>;
71 template class money_put<wchar_t, wibuf_iterator>;
72 template class _Format_cache<wchar_t>;
73 #endif
75 // numpunct, numpunct_byname, num_get, and num_put
76 template class numpunct<char>;
77 template class numpunct_byname<char>;
78 template class num_get<char, ibuf_iterator>;
79 template class num_put<char, obuf_iterator>;
80 #ifdef _GLIBCPP_USE_WCHAR_T
81 template class numpunct<wchar_t>;
82 template class numpunct_byname<wchar_t>;
83 template class num_get<wchar_t, wibuf_iterator>;
84 template class num_put<wchar_t, wobuf_iterator>;
85 #endif
87 // time_get and time_put
88 template class time_put<char, obuf_iterator>;
89 template class time_put_byname<char, obuf_iterator>;
90 template class time_get<char, ibuf_iterator>;
91 template class time_get_byname<char, ibuf_iterator>;
93 #ifdef _GLIBCPP_USE_WCHAR_T
94 template class time_put<wchar_t, wobuf_iterator>;
95 template class time_put_byname<wchar_t, wobuf_iterator>;
96 template class time_get<wchar_t, wibuf_iterator>;
97 template class time_get_byname<wchar_t, wibuf_iterator>;
98 #endif
100 // messages
101 template class messages<char>;
102 template class messages_byname<char>;
103 #ifdef _GLIBCPP_USE_WCHAR_T
104 template class messages<wchar_t>;
105 template class messages_byname<wchar_t>;
106 #endif
108 // ctype
109 template class __ctype_abstract_base<char>;
110 template class ctype_byname<char>;
111 #ifdef _GLIBCPP_USE_WCHAR_T
112 template class __ctype_abstract_base<wchar_t>;
113 template class ctype_byname<wchar_t>;
114 #endif
116 // codecvt
117 template class __codecvt_abstract_base<char, char, mbstate_t>;
118 template class __codecvt_abstract_base<wchar_t, char, mbstate_t>;
119 template class codecvt_byname<char, char, mbstate_t>;
120 #ifdef _GLIBCPP_USE_WCHAR_T
121 template class codecvt_byname<wchar_t, char, mbstate_t>;
122 #endif
124 // collate
125 template class collate<char>;
126 template class collate_byname<char>;
127 template class _Weekdaynames<char, int>;
128 template class _Monthnames<char, int>;
129 #ifdef _GLIBCPP_USE_WCHAR_T
130 template class collate<wchar_t>;
131 template class collate_byname<wchar_t>;
132 template class _Weekdaynames<wchar_t, int>;
133 template class _Monthnames<wchar_t, int>;
134 #endif
136 // use_facet
137 template
138 const num_put<char, obuf_iterator >&
139 use_facet<num_put<char, obuf_iterator> >(const locale&);
140 template
141 const num_get<char, ibuf_iterator >&
142 use_facet<num_get<char, ibuf_iterator> >(const locale&);
143 template
144 const codecvt<char, char, mbstate_t>&
145 use_facet<codecvt<char, char, mbstate_t> >(const locale&);
146 template
147 const numpunct<char>&
148 use_facet<numpunct<char> >(const locale&);
149 template
150 const collate<char>&
151 use_facet<collate<char> >(const locale&);
152 #ifdef _GLIBCPP_USE_WCHAR_T
153 template
154 const num_put<wchar_t, wobuf_iterator>&
155 use_facet<num_put<wchar_t, wobuf_iterator> >(const locale&);
156 template
157 const num_get<wchar_t, wibuf_iterator>&
158 use_facet<num_get<wchar_t, wibuf_iterator> >(const locale&);
159 template
160 const codecvt<wchar_t, char, mbstate_t>&
161 use_facet<codecvt<wchar_t, char, mbstate_t> >(locale const&);
162 template
163 const numpunct<wchar_t>&
164 use_facet<numpunct<wchar_t> >(const locale&);
165 template
166 const collate<wchar_t>&
167 use_facet<collate<wchar_t> >(const locale&);
168 #endif
170 // has_facet
171 template
172 bool
173 has_facet<numpunct<char> >(const locale&);
174 template
175 bool
176 has_facet<num_put<char> >(const locale&);
177 template
178 bool
179 has_facet<num_get<char> >(const locale&);
180 template
181 bool
182 has_facet<ctype<char> >(const locale&);
184 #ifdef _GLIBCPP_USE_WCHAR_T
185 template
186 bool
187 has_facet<numpunct<wchar_t> >(const locale&);
188 template
189 bool
190 has_facet<num_put<wchar_t> >(const locale&);
191 template
192 bool
193 has_facet<num_get<wchar_t> >(const locale&);
194 template
195 bool
196 has_facet<ctype<wchar_t> >(const locale&);
197 #endif
200 // iterator
202 typedef vector<locale::facet*> vec_pfacet;
203 template
204 void
205 vec_pfacet::
206 insert(vec_pfacet::iterator, vec_pfacet::size_type,
207 const vec_pfacet::value_type&);
208 template
209 void
210 vec_pfacet::
211 _M_fill_insert(vec_pfacet::iterator, vec_pfacet::size_type,
212 const vec_pfacet::value_type&);
215 typedef istreambuf_iterator<char, char_traits<char> > istreambuf_iter;
216 typedef ostreambuf_iterator<char, char_traits<char> > ostreambuf_iter;
219 template
220 istreambuf_iter
221 __match_parallel<istreambuf_iter, char>
222 (istreambuf_iter, istreambuf_iter, int, const string*, int*, int&, bool&);
225 #ifdef _GLIBCPP_USE_WCHAR_T
226 typedef istreambuf_iterator<wchar_t,char_traits<wchar_t> > wistreambuf_iter;
227 typedef ostreambuf_iterator<wchar_t,char_traits<wchar_t> > wostreambuf_iter;
229 template
230 wistreambuf_iter
231 __match_parallel<wistreambuf_iter, wchar_t>
232 (wistreambuf_iter, wistreambuf_iter, int, const wstring*, int*, int&, bool&);
233 #endif
237 // locale
239 template
240 bool
241 locale::operator()(const string&, const string&) const;
243 template
244 ostreambuf_iter
245 __pad<char, ostreambuf_iter, output_iterator_tag>
246 (ostreambuf_iter, char, int, output_iterator_tag);
248 template
249 ostreambuf_iter
250 __pad_numeric<char, ostreambuf_iter>
251 (ostreambuf_iter, ios_base::fmtflags, char, int, char const*, char const*,
252 char const*);
254 template
255 char*
256 __group_digits<char>(char*, char, char const*, char const*,
257 char const*, char const*);
259 template
260 ostreambuf_iter
261 __output_integer<char, ostreambuf_iter, unsigned long>
262 (ostreambuf_iter, ios_base &, char, bool, unsigned long);
264 #ifdef _GLIBCPP_USE_LONG_LONG
265 template
266 ostreambuf_iter
267 __output_integer<char, ostreambuf_iter, unsigned long long>
268 (ostreambuf_iter, ios_base &, char, bool, unsigned long long);
269 #endif
271 #ifdef _GLIBCPP_USE_WCHAR_T
272 template
273 bool
274 locale::operator()(const wstring&, const wstring&) const;
276 typedef ostreambuf_iterator<wchar_t> wostreambuf_iter;
278 template
279 wostreambuf_iter
280 __pad<wchar_t, wostreambuf_iter, output_iterator_tag>
281 (wostreambuf_iter, wchar_t, int, output_iterator_tag);
283 template
284 wostreambuf_iter
285 __pad_numeric<wchar_t, wostreambuf_iter>
286 (wostreambuf_iter, ios_base::fmtflags, wchar_t __fill, int, wchar_t const*,
287 wchar_t const*, wchar_t const*);
289 template
290 wchar_t*
291 __group_digits<wchar_t>(wchar_t*, wchar_t, char const*, char const*,
292 wchar_t const*, wchar_t const*);
294 template
295 wostreambuf_iter
296 __output_integer<wchar_t, wostreambuf_iter, unsigned long>
297 (wostreambuf_iter, ios_base &, wchar_t, bool, unsigned long);
299 #ifdef _GLIBCPP_USE_LONG_LONG
300 template
301 wostreambuf_iter
302 __output_integer<wchar_t, wostreambuf_iter, unsigned long long>
303 (wostreambuf_iter, ios_base &, wchar_t, bool, unsigned long long);
304 #endif
305 #endif // _GLIBCPP_USE_WCHAR_T
307 template
308 locale::facet**
309 fill_n<locale::facet**, size_t, locale::facet*>
310 (locale::facet**, size_t, locale::facet* const&);
312 template
313 __normal_iterator<locale::facet**, vector<locale::facet*> >
314 fill_n(__normal_iterator<locale::facet**, vector<locale::facet*> >,
315 size_t, locale::facet* const&);
317 template
318 void
319 fill(__normal_iterator<locale::facet**, vector<locale::facet*> >,
320 __normal_iterator<locale::facet**, vector<locale::facet*> >,
321 locale::facet* const&);
322 } // namespace std