1// Locale support -*- C++ -*-
2
3// Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2005, 2006
4// Free Software Foundation, Inc.
5//
6// This file is part of the GNU ISO C++ Library.  This library is free
7// software; you can redistribute it and/or modify it under the
8// terms of the GNU General Public License as published by the
9// Free Software Foundation; either version 2, or (at your option)
10// any later version.
11
12// This library is distributed in the hope that it will be useful,
13// but WITHOUT ANY WARRANTY; without even the implied warranty of
14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15// GNU General Public License for more details.
16
17// You should have received a copy of the GNU General Public License along
18// with this library; see the file COPYING.  If not, write to the Free
19// Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
20// USA.
21
22// As a special exception, you may use this file as part of a free software
23// library without restriction.  Specifically, if other files instantiate
24// templates or use macros or inline functions from this file, or you compile
25// this file and link it with other files to produce an executable, this
26// file does not by itself cause the resulting executable to be covered by
27// the GNU General Public License.  This exception does not however
28// invalidate any other reasons why the executable file might be covered by
29// the GNU General Public License.
30
31/** @file localefwd.h
32 *  This is an internal header file, included by other library headers.
33 *  You should not attempt to use it directly.
34 */
35
36//
37// ISO C++ 14882: 22.1  Locales
38//
39
40#ifndef _LOCALE_FWD_H
41#define _LOCALE_FWD_H 1
42
43#pragma GCC system_header
44
45#include <bits/c++config.h>
46#include <bits/c++locale.h>     // Defines __c_locale, config-specific includes
47#include <iosfwd>		// For ostreambuf_iterator, istreambuf_iterator
48#include <bits/functexcept.h>
49
50_GLIBCXX_BEGIN_NAMESPACE(std)
51
52  // 22.1.1 Locale
53  class locale;
54
55  // 22.1.3 Convenience interfaces
56  template<typename _CharT>
57    inline bool
58    isspace(_CharT, const locale&);
59
60  template<typename _CharT>
61    inline bool
62    isprint(_CharT, const locale&);
63
64  template<typename _CharT>
65    inline bool
66    iscntrl(_CharT, const locale&);
67
68  template<typename _CharT>
69    inline bool
70    isupper(_CharT, const locale&);
71
72  template<typename _CharT>
73    inline bool
74    islower(_CharT, const locale&);
75
76  template<typename _CharT>
77    inline bool
78    isalpha(_CharT, const locale&);
79
80  template<typename _CharT>
81    inline bool
82    isdigit(_CharT, const locale&);
83
84  template<typename _CharT>
85    inline bool
86    ispunct(_CharT, const locale&);
87
88  template<typename _CharT>
89    inline bool
90    isxdigit(_CharT, const locale&);
91
92  template<typename _CharT>
93    inline bool
94    isalnum(_CharT, const locale&);
95
96  template<typename _CharT>
97    inline bool
98    isgraph(_CharT, const locale&);
99
100  template<typename _CharT>
101    inline _CharT
102    toupper(_CharT, const locale&);
103
104  template<typename _CharT>
105    inline _CharT
106    tolower(_CharT, const locale&);
107
108  // 22.2.1 and 22.2.1.3 ctype
109  class ctype_base;
110  template<typename _CharT>
111    class ctype;
112  template<> class ctype<char>;
113#ifdef _GLIBCXX_USE_WCHAR_T
114  template<> class ctype<wchar_t>;
115#endif
116  template<typename _CharT>
117    class ctype_byname;
118  // NB: Specialized for char and wchar_t in locale_facets.h.
119
120  class codecvt_base;
121  class __enc_traits;
122  template<typename _InternT, typename _ExternT, typename _StateT>
123    class codecvt;
124  template<> class codecvt<char, char, mbstate_t>;
125#ifdef _GLIBCXX_USE_WCHAR_T
126  template<> class codecvt<wchar_t, char, mbstate_t>;
127#endif
128  template<typename _InternT, typename _ExternT, typename _StateT>
129    class codecvt_byname;
130
131  // 22.2.2 and 22.2.3 numeric
132_GLIBCXX_BEGIN_LDBL_NAMESPACE
133  template<typename _CharT, typename _InIter = istreambuf_iterator<_CharT> >
134    class num_get;
135  template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
136    class num_put;
137_GLIBCXX_END_LDBL_NAMESPACE
138  template<typename _CharT> class numpunct;
139  template<typename _CharT> class numpunct_byname;
140
141  // 22.2.4 collation
142  template<typename _CharT>
143    class collate;
144  template<typename _CharT> class
145    collate_byname;
146
147  // 22.2.5 date and time
148  class time_base;
149  template<typename _CharT, typename _InIter =  istreambuf_iterator<_CharT> >
150    class time_get;
151  template<typename _CharT, typename _InIter =  istreambuf_iterator<_CharT> >
152    class time_get_byname;
153  template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
154    class time_put;
155  template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
156    class time_put_byname;
157
158  // 22.2.6 money
159  class money_base;
160_GLIBCXX_BEGIN_LDBL_NAMESPACE
161  template<typename _CharT, typename _InIter =  istreambuf_iterator<_CharT> >
162    class money_get;
163  template<typename _CharT, typename _OutIter = ostreambuf_iterator<_CharT> >
164    class money_put;
165_GLIBCXX_END_LDBL_NAMESPACE
166  template<typename _CharT, bool _Intl = false>
167    class moneypunct;
168  template<typename _CharT, bool _Intl = false>
169    class moneypunct_byname;
170
171  // 22.2.7 message retrieval
172  class messages_base;
173  template<typename _CharT>
174    class messages;
175  template<typename _CharT>
176    class messages_byname;
177
178  template<typename _Facet>
179    bool
180    has_facet(const locale& __loc) throw();
181
182  template<typename _Facet>
183    const _Facet&
184    use_facet(const locale& __loc);
185
186  template<typename _Facet>
187    inline const _Facet&
188    __check_facet(const _Facet* __f)
189    {
190      if (!__f)
191	__throw_bad_cast();
192      return *__f;
193    }
194
195_GLIBCXX_END_NAMESPACE
196
197#endif
198