xref: /freebsd/contrib/llvm-project/libcxx/include/__cxx03/codecvt (revision 700637cbb5e582861067a11aaca4d053546871d2)
1*700637cbSDimitry Andric// -*- C++ -*-
2*700637cbSDimitry Andric//===----------------------------------------------------------------------===//
3*700637cbSDimitry Andric//
4*700637cbSDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5*700637cbSDimitry Andric// See https://llvm.org/LICENSE.txt for license information.
6*700637cbSDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7*700637cbSDimitry Andric//
8*700637cbSDimitry Andric//===----------------------------------------------------------------------===//
9*700637cbSDimitry Andric
10*700637cbSDimitry Andric#ifndef _LIBCPP___CXX03_CODECVT
11*700637cbSDimitry Andric#define _LIBCPP___CXX03_CODECVT
12*700637cbSDimitry Andric
13*700637cbSDimitry Andric/*
14*700637cbSDimitry Andric    codecvt synopsis
15*700637cbSDimitry Andric
16*700637cbSDimitry Andricnamespace std
17*700637cbSDimitry Andric{
18*700637cbSDimitry Andric
19*700637cbSDimitry Andricenum codecvt_mode
20*700637cbSDimitry Andric{
21*700637cbSDimitry Andric    consume_header = 4,
22*700637cbSDimitry Andric    generate_header = 2,
23*700637cbSDimitry Andric    little_endian = 1
24*700637cbSDimitry Andric};
25*700637cbSDimitry Andric
26*700637cbSDimitry Andrictemplate <class Elem, unsigned long Maxcode = 0x10ffff,
27*700637cbSDimitry Andric          codecvt_mode Mode = (codecvt_mode)0>
28*700637cbSDimitry Andricclass codecvt_utf8
29*700637cbSDimitry Andric    : public codecvt<Elem, char, mbstate_t>
30*700637cbSDimitry Andric{
31*700637cbSDimitry Andric    explicit codecvt_utf8(size_t refs = 0);
32*700637cbSDimitry Andric    ~codecvt_utf8();
33*700637cbSDimitry Andric};
34*700637cbSDimitry Andric
35*700637cbSDimitry Andrictemplate <class Elem, unsigned long Maxcode = 0x10ffff,
36*700637cbSDimitry Andric          codecvt_mode Mode = (codecvt_mode)0>
37*700637cbSDimitry Andricclass codecvt_utf16
38*700637cbSDimitry Andric    : public codecvt<Elem, char, mbstate_t>
39*700637cbSDimitry Andric{
40*700637cbSDimitry Andric    explicit codecvt_utf16(size_t refs = 0);
41*700637cbSDimitry Andric    ~codecvt_utf16();
42*700637cbSDimitry Andric};
43*700637cbSDimitry Andric
44*700637cbSDimitry Andrictemplate <class Elem, unsigned long Maxcode = 0x10ffff,
45*700637cbSDimitry Andric          codecvt_mode Mode = (codecvt_mode)0>
46*700637cbSDimitry Andricclass codecvt_utf8_utf16
47*700637cbSDimitry Andric    : public codecvt<Elem, char, mbstate_t>
48*700637cbSDimitry Andric{
49*700637cbSDimitry Andric    explicit codecvt_utf8_utf16(size_t refs = 0);
50*700637cbSDimitry Andric    ~codecvt_utf8_utf16();
51*700637cbSDimitry Andric};
52*700637cbSDimitry Andric
53*700637cbSDimitry Andric}  // std
54*700637cbSDimitry Andric
55*700637cbSDimitry Andric*/
56*700637cbSDimitry Andric
57*700637cbSDimitry Andric#include <__cxx03/__config>
58*700637cbSDimitry Andric#include <__cxx03/__locale>
59*700637cbSDimitry Andric#include <__cxx03/version>
60*700637cbSDimitry Andric
61*700637cbSDimitry Andric#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
62*700637cbSDimitry Andric#  pragma GCC system_header
63*700637cbSDimitry Andric#endif
64*700637cbSDimitry Andric
65*700637cbSDimitry Andric_LIBCPP_BEGIN_NAMESPACE_STD
66*700637cbSDimitry Andric
67*700637cbSDimitry Andricenum codecvt_mode { consume_header = 4, generate_header = 2, little_endian = 1 };
68*700637cbSDimitry Andric
69*700637cbSDimitry Andric// codecvt_utf8
70*700637cbSDimitry Andric
71*700637cbSDimitry Andrictemplate <class _Elem>
72*700637cbSDimitry Andricclass __codecvt_utf8;
73*700637cbSDimitry Andric
74*700637cbSDimitry Andric#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS
75*700637cbSDimitry Andrictemplate <>
76*700637cbSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf8<wchar_t> : public codecvt<wchar_t, char, mbstate_t> {
77*700637cbSDimitry Andric  unsigned long __maxcode_;
78*700637cbSDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_PUSH
79*700637cbSDimitry Andric  codecvt_mode __mode_;
80*700637cbSDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_POP
81*700637cbSDimitry Andric
82*700637cbSDimitry Andricpublic:
83*700637cbSDimitry Andric  typedef wchar_t intern_type;
84*700637cbSDimitry Andric  typedef char extern_type;
85*700637cbSDimitry Andric  typedef mbstate_t state_type;
86*700637cbSDimitry Andric
87*700637cbSDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_PUSH
88*700637cbSDimitry Andric  _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf8(size_t __refs, unsigned long __maxcode, codecvt_mode __mode)
89*700637cbSDimitry Andric      : codecvt<wchar_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {}
90*700637cbSDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_POP
91*700637cbSDimitry Andric
92*700637cbSDimitry Andricprotected:
93*700637cbSDimitry Andric  result do_out(state_type& __st,
94*700637cbSDimitry Andric                const intern_type* __frm,
95*700637cbSDimitry Andric                const intern_type* __frm_end,
96*700637cbSDimitry Andric                const intern_type*& __frm_nxt,
97*700637cbSDimitry Andric                extern_type* __to,
98*700637cbSDimitry Andric                extern_type* __to_end,
99*700637cbSDimitry Andric                extern_type*& __to_nxt) const override;
100*700637cbSDimitry Andric  result do_in(state_type& __st,
101*700637cbSDimitry Andric               const extern_type* __frm,
102*700637cbSDimitry Andric               const extern_type* __frm_end,
103*700637cbSDimitry Andric               const extern_type*& __frm_nxt,
104*700637cbSDimitry Andric               intern_type* __to,
105*700637cbSDimitry Andric               intern_type* __to_end,
106*700637cbSDimitry Andric               intern_type*& __to_nxt) const override;
107*700637cbSDimitry Andric  result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
108*700637cbSDimitry Andric  int do_encoding() const _NOEXCEPT override;
109*700637cbSDimitry Andric  bool do_always_noconv() const _NOEXCEPT override;
110*700637cbSDimitry Andric  int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
111*700637cbSDimitry Andric  int do_max_length() const _NOEXCEPT override;
112*700637cbSDimitry Andric};
113*700637cbSDimitry Andric#endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS
114*700637cbSDimitry Andric
115*700637cbSDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_PUSH
116*700637cbSDimitry Andrictemplate <>
117*700637cbSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf8<char16_t> : public codecvt<char16_t, char, mbstate_t> {
118*700637cbSDimitry Andric  unsigned long __maxcode_;
119*700637cbSDimitry Andric  codecvt_mode __mode_;
120*700637cbSDimitry Andric
121*700637cbSDimitry Andricpublic:
122*700637cbSDimitry Andric  typedef char16_t intern_type;
123*700637cbSDimitry Andric  typedef char extern_type;
124*700637cbSDimitry Andric  typedef mbstate_t state_type;
125*700637cbSDimitry Andric
126*700637cbSDimitry Andric  _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf8(size_t __refs, unsigned long __maxcode, codecvt_mode __mode)
127*700637cbSDimitry Andric      : codecvt<char16_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {}
128*700637cbSDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_POP
129*700637cbSDimitry Andric
130*700637cbSDimitry Andricprotected:
131*700637cbSDimitry Andric  result do_out(state_type& __st,
132*700637cbSDimitry Andric                const intern_type* __frm,
133*700637cbSDimitry Andric                const intern_type* __frm_end,
134*700637cbSDimitry Andric                const intern_type*& __frm_nxt,
135*700637cbSDimitry Andric                extern_type* __to,
136*700637cbSDimitry Andric                extern_type* __to_end,
137*700637cbSDimitry Andric                extern_type*& __to_nxt) const override;
138*700637cbSDimitry Andric  result do_in(state_type& __st,
139*700637cbSDimitry Andric               const extern_type* __frm,
140*700637cbSDimitry Andric               const extern_type* __frm_end,
141*700637cbSDimitry Andric               const extern_type*& __frm_nxt,
142*700637cbSDimitry Andric               intern_type* __to,
143*700637cbSDimitry Andric               intern_type* __to_end,
144*700637cbSDimitry Andric               intern_type*& __to_nxt) const override;
145*700637cbSDimitry Andric  result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
146*700637cbSDimitry Andric  int do_encoding() const _NOEXCEPT override;
147*700637cbSDimitry Andric  bool do_always_noconv() const _NOEXCEPT override;
148*700637cbSDimitry Andric  int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
149*700637cbSDimitry Andric  int do_max_length() const _NOEXCEPT override;
150*700637cbSDimitry Andric};
151*700637cbSDimitry Andric
152*700637cbSDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_PUSH
153*700637cbSDimitry Andrictemplate <>
154*700637cbSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf8<char32_t> : public codecvt<char32_t, char, mbstate_t> {
155*700637cbSDimitry Andric  unsigned long __maxcode_;
156*700637cbSDimitry Andric  codecvt_mode __mode_;
157*700637cbSDimitry Andric
158*700637cbSDimitry Andricpublic:
159*700637cbSDimitry Andric  typedef char32_t intern_type;
160*700637cbSDimitry Andric  typedef char extern_type;
161*700637cbSDimitry Andric  typedef mbstate_t state_type;
162*700637cbSDimitry Andric
163*700637cbSDimitry Andric  _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf8(size_t __refs, unsigned long __maxcode, codecvt_mode __mode)
164*700637cbSDimitry Andric      : codecvt<char32_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {}
165*700637cbSDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_POP
166*700637cbSDimitry Andric
167*700637cbSDimitry Andricprotected:
168*700637cbSDimitry Andric  result do_out(state_type& __st,
169*700637cbSDimitry Andric                const intern_type* __frm,
170*700637cbSDimitry Andric                const intern_type* __frm_end,
171*700637cbSDimitry Andric                const intern_type*& __frm_nxt,
172*700637cbSDimitry Andric                extern_type* __to,
173*700637cbSDimitry Andric                extern_type* __to_end,
174*700637cbSDimitry Andric                extern_type*& __to_nxt) const override;
175*700637cbSDimitry Andric  result do_in(state_type& __st,
176*700637cbSDimitry Andric               const extern_type* __frm,
177*700637cbSDimitry Andric               const extern_type* __frm_end,
178*700637cbSDimitry Andric               const extern_type*& __frm_nxt,
179*700637cbSDimitry Andric               intern_type* __to,
180*700637cbSDimitry Andric               intern_type* __to_end,
181*700637cbSDimitry Andric               intern_type*& __to_nxt) const override;
182*700637cbSDimitry Andric  result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
183*700637cbSDimitry Andric  int do_encoding() const _NOEXCEPT override;
184*700637cbSDimitry Andric  bool do_always_noconv() const _NOEXCEPT override;
185*700637cbSDimitry Andric  int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
186*700637cbSDimitry Andric  int do_max_length() const _NOEXCEPT override;
187*700637cbSDimitry Andric};
188*700637cbSDimitry Andric
189*700637cbSDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_PUSH
190*700637cbSDimitry Andrictemplate <class _Elem, unsigned long _Maxcode = 0x10ffff, codecvt_mode _Mode = (codecvt_mode)0>
191*700637cbSDimitry Andricclass _LIBCPP_TEMPLATE_VIS codecvt_utf8 : public __codecvt_utf8<_Elem> {
192*700637cbSDimitry Andricpublic:
193*700637cbSDimitry Andric  _LIBCPP_HIDE_FROM_ABI explicit codecvt_utf8(size_t __refs = 0) : __codecvt_utf8<_Elem>(__refs, _Maxcode, _Mode) {}
194*700637cbSDimitry Andric
195*700637cbSDimitry Andric  _LIBCPP_HIDE_FROM_ABI ~codecvt_utf8() {}
196*700637cbSDimitry Andric};
197*700637cbSDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_POP
198*700637cbSDimitry Andric
199*700637cbSDimitry Andric// codecvt_utf16
200*700637cbSDimitry Andric
201*700637cbSDimitry Andrictemplate <class _Elem, bool _LittleEndian>
202*700637cbSDimitry Andricclass __codecvt_utf16;
203*700637cbSDimitry Andric
204*700637cbSDimitry Andric#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS
205*700637cbSDimitry Andrictemplate <>
206*700637cbSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf16<wchar_t, false> : public codecvt<wchar_t, char, mbstate_t> {
207*700637cbSDimitry Andric  unsigned long __maxcode_;
208*700637cbSDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_PUSH
209*700637cbSDimitry Andric  codecvt_mode __mode_;
210*700637cbSDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_POP
211*700637cbSDimitry Andric
212*700637cbSDimitry Andricpublic:
213*700637cbSDimitry Andric  typedef wchar_t intern_type;
214*700637cbSDimitry Andric  typedef char extern_type;
215*700637cbSDimitry Andric  typedef mbstate_t state_type;
216*700637cbSDimitry Andric
217*700637cbSDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_PUSH
218*700637cbSDimitry Andric  _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf16(size_t __refs, unsigned long __maxcode, codecvt_mode __mode)
219*700637cbSDimitry Andric      : codecvt<wchar_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {}
220*700637cbSDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_POP
221*700637cbSDimitry Andric
222*700637cbSDimitry Andricprotected:
223*700637cbSDimitry Andric  result do_out(state_type& __st,
224*700637cbSDimitry Andric                const intern_type* __frm,
225*700637cbSDimitry Andric                const intern_type* __frm_end,
226*700637cbSDimitry Andric                const intern_type*& __frm_nxt,
227*700637cbSDimitry Andric                extern_type* __to,
228*700637cbSDimitry Andric                extern_type* __to_end,
229*700637cbSDimitry Andric                extern_type*& __to_nxt) const override;
230*700637cbSDimitry Andric  result do_in(state_type& __st,
231*700637cbSDimitry Andric               const extern_type* __frm,
232*700637cbSDimitry Andric               const extern_type* __frm_end,
233*700637cbSDimitry Andric               const extern_type*& __frm_nxt,
234*700637cbSDimitry Andric               intern_type* __to,
235*700637cbSDimitry Andric               intern_type* __to_end,
236*700637cbSDimitry Andric               intern_type*& __to_nxt) const override;
237*700637cbSDimitry Andric  result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
238*700637cbSDimitry Andric  int do_encoding() const _NOEXCEPT override;
239*700637cbSDimitry Andric  bool do_always_noconv() const _NOEXCEPT override;
240*700637cbSDimitry Andric  int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
241*700637cbSDimitry Andric  int do_max_length() const _NOEXCEPT override;
242*700637cbSDimitry Andric};
243*700637cbSDimitry Andric
244*700637cbSDimitry Andrictemplate <>
245*700637cbSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf16<wchar_t, true> : public codecvt<wchar_t, char, mbstate_t> {
246*700637cbSDimitry Andric  unsigned long __maxcode_;
247*700637cbSDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_PUSH
248*700637cbSDimitry Andric  codecvt_mode __mode_;
249*700637cbSDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_POP
250*700637cbSDimitry Andric
251*700637cbSDimitry Andricpublic:
252*700637cbSDimitry Andric  typedef wchar_t intern_type;
253*700637cbSDimitry Andric  typedef char extern_type;
254*700637cbSDimitry Andric  typedef mbstate_t state_type;
255*700637cbSDimitry Andric
256*700637cbSDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_PUSH
257*700637cbSDimitry Andric  _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf16(size_t __refs, unsigned long __maxcode, codecvt_mode __mode)
258*700637cbSDimitry Andric      : codecvt<wchar_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {}
259*700637cbSDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_POP
260*700637cbSDimitry Andric
261*700637cbSDimitry Andricprotected:
262*700637cbSDimitry Andric  result do_out(state_type& __st,
263*700637cbSDimitry Andric                const intern_type* __frm,
264*700637cbSDimitry Andric                const intern_type* __frm_end,
265*700637cbSDimitry Andric                const intern_type*& __frm_nxt,
266*700637cbSDimitry Andric                extern_type* __to,
267*700637cbSDimitry Andric                extern_type* __to_end,
268*700637cbSDimitry Andric                extern_type*& __to_nxt) const override;
269*700637cbSDimitry Andric  result do_in(state_type& __st,
270*700637cbSDimitry Andric               const extern_type* __frm,
271*700637cbSDimitry Andric               const extern_type* __frm_end,
272*700637cbSDimitry Andric               const extern_type*& __frm_nxt,
273*700637cbSDimitry Andric               intern_type* __to,
274*700637cbSDimitry Andric               intern_type* __to_end,
275*700637cbSDimitry Andric               intern_type*& __to_nxt) const override;
276*700637cbSDimitry Andric  result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
277*700637cbSDimitry Andric  int do_encoding() const _NOEXCEPT override;
278*700637cbSDimitry Andric  bool do_always_noconv() const _NOEXCEPT override;
279*700637cbSDimitry Andric  int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
280*700637cbSDimitry Andric  int do_max_length() const _NOEXCEPT override;
281*700637cbSDimitry Andric};
282*700637cbSDimitry Andric#endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS
283*700637cbSDimitry Andric
284*700637cbSDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_PUSH
285*700637cbSDimitry Andrictemplate <>
286*700637cbSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf16<char16_t, false> : public codecvt<char16_t, char, mbstate_t> {
287*700637cbSDimitry Andric  unsigned long __maxcode_;
288*700637cbSDimitry Andric  codecvt_mode __mode_;
289*700637cbSDimitry Andric
290*700637cbSDimitry Andricpublic:
291*700637cbSDimitry Andric  typedef char16_t intern_type;
292*700637cbSDimitry Andric  typedef char extern_type;
293*700637cbSDimitry Andric  typedef mbstate_t state_type;
294*700637cbSDimitry Andric
295*700637cbSDimitry Andric  _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf16(size_t __refs, unsigned long __maxcode, codecvt_mode __mode)
296*700637cbSDimitry Andric      : codecvt<char16_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {}
297*700637cbSDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_POP
298*700637cbSDimitry Andric
299*700637cbSDimitry Andricprotected:
300*700637cbSDimitry Andric  result do_out(state_type& __st,
301*700637cbSDimitry Andric                const intern_type* __frm,
302*700637cbSDimitry Andric                const intern_type* __frm_end,
303*700637cbSDimitry Andric                const intern_type*& __frm_nxt,
304*700637cbSDimitry Andric                extern_type* __to,
305*700637cbSDimitry Andric                extern_type* __to_end,
306*700637cbSDimitry Andric                extern_type*& __to_nxt) const override;
307*700637cbSDimitry Andric  result do_in(state_type& __st,
308*700637cbSDimitry Andric               const extern_type* __frm,
309*700637cbSDimitry Andric               const extern_type* __frm_end,
310*700637cbSDimitry Andric               const extern_type*& __frm_nxt,
311*700637cbSDimitry Andric               intern_type* __to,
312*700637cbSDimitry Andric               intern_type* __to_end,
313*700637cbSDimitry Andric               intern_type*& __to_nxt) const override;
314*700637cbSDimitry Andric  result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
315*700637cbSDimitry Andric  int do_encoding() const _NOEXCEPT override;
316*700637cbSDimitry Andric  bool do_always_noconv() const _NOEXCEPT override;
317*700637cbSDimitry Andric  int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
318*700637cbSDimitry Andric  int do_max_length() const _NOEXCEPT override;
319*700637cbSDimitry Andric};
320*700637cbSDimitry Andric
321*700637cbSDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_PUSH
322*700637cbSDimitry Andrictemplate <>
323*700637cbSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf16<char16_t, true> : public codecvt<char16_t, char, mbstate_t> {
324*700637cbSDimitry Andric  unsigned long __maxcode_;
325*700637cbSDimitry Andric  codecvt_mode __mode_;
326*700637cbSDimitry Andric
327*700637cbSDimitry Andricpublic:
328*700637cbSDimitry Andric  typedef char16_t intern_type;
329*700637cbSDimitry Andric  typedef char extern_type;
330*700637cbSDimitry Andric  typedef mbstate_t state_type;
331*700637cbSDimitry Andric
332*700637cbSDimitry Andric  _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf16(size_t __refs, unsigned long __maxcode, codecvt_mode __mode)
333*700637cbSDimitry Andric      : codecvt<char16_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {}
334*700637cbSDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_POP
335*700637cbSDimitry Andric
336*700637cbSDimitry Andricprotected:
337*700637cbSDimitry Andric  result do_out(state_type& __st,
338*700637cbSDimitry Andric                const intern_type* __frm,
339*700637cbSDimitry Andric                const intern_type* __frm_end,
340*700637cbSDimitry Andric                const intern_type*& __frm_nxt,
341*700637cbSDimitry Andric                extern_type* __to,
342*700637cbSDimitry Andric                extern_type* __to_end,
343*700637cbSDimitry Andric                extern_type*& __to_nxt) const override;
344*700637cbSDimitry Andric  result do_in(state_type& __st,
345*700637cbSDimitry Andric               const extern_type* __frm,
346*700637cbSDimitry Andric               const extern_type* __frm_end,
347*700637cbSDimitry Andric               const extern_type*& __frm_nxt,
348*700637cbSDimitry Andric               intern_type* __to,
349*700637cbSDimitry Andric               intern_type* __to_end,
350*700637cbSDimitry Andric               intern_type*& __to_nxt) const override;
351*700637cbSDimitry Andric  result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
352*700637cbSDimitry Andric  int do_encoding() const _NOEXCEPT override;
353*700637cbSDimitry Andric  bool do_always_noconv() const _NOEXCEPT override;
354*700637cbSDimitry Andric  int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
355*700637cbSDimitry Andric  int do_max_length() const _NOEXCEPT override;
356*700637cbSDimitry Andric};
357*700637cbSDimitry Andric
358*700637cbSDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_PUSH
359*700637cbSDimitry Andrictemplate <>
360*700637cbSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf16<char32_t, false> : public codecvt<char32_t, char, mbstate_t> {
361*700637cbSDimitry Andric  unsigned long __maxcode_;
362*700637cbSDimitry Andric  codecvt_mode __mode_;
363*700637cbSDimitry Andric
364*700637cbSDimitry Andricpublic:
365*700637cbSDimitry Andric  typedef char32_t intern_type;
366*700637cbSDimitry Andric  typedef char extern_type;
367*700637cbSDimitry Andric  typedef mbstate_t state_type;
368*700637cbSDimitry Andric
369*700637cbSDimitry Andric  _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf16(size_t __refs, unsigned long __maxcode, codecvt_mode __mode)
370*700637cbSDimitry Andric      : codecvt<char32_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {}
371*700637cbSDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_POP
372*700637cbSDimitry Andric
373*700637cbSDimitry Andricprotected:
374*700637cbSDimitry Andric  result do_out(state_type& __st,
375*700637cbSDimitry Andric                const intern_type* __frm,
376*700637cbSDimitry Andric                const intern_type* __frm_end,
377*700637cbSDimitry Andric                const intern_type*& __frm_nxt,
378*700637cbSDimitry Andric                extern_type* __to,
379*700637cbSDimitry Andric                extern_type* __to_end,
380*700637cbSDimitry Andric                extern_type*& __to_nxt) const override;
381*700637cbSDimitry Andric  result do_in(state_type& __st,
382*700637cbSDimitry Andric               const extern_type* __frm,
383*700637cbSDimitry Andric               const extern_type* __frm_end,
384*700637cbSDimitry Andric               const extern_type*& __frm_nxt,
385*700637cbSDimitry Andric               intern_type* __to,
386*700637cbSDimitry Andric               intern_type* __to_end,
387*700637cbSDimitry Andric               intern_type*& __to_nxt) const override;
388*700637cbSDimitry Andric  result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
389*700637cbSDimitry Andric  int do_encoding() const _NOEXCEPT override;
390*700637cbSDimitry Andric  bool do_always_noconv() const _NOEXCEPT override;
391*700637cbSDimitry Andric  int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
392*700637cbSDimitry Andric  int do_max_length() const _NOEXCEPT override;
393*700637cbSDimitry Andric};
394*700637cbSDimitry Andric
395*700637cbSDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_PUSH
396*700637cbSDimitry Andrictemplate <>
397*700637cbSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf16<char32_t, true> : public codecvt<char32_t, char, mbstate_t> {
398*700637cbSDimitry Andric  unsigned long __maxcode_;
399*700637cbSDimitry Andric  codecvt_mode __mode_;
400*700637cbSDimitry Andric
401*700637cbSDimitry Andricpublic:
402*700637cbSDimitry Andric  typedef char32_t intern_type;
403*700637cbSDimitry Andric  typedef char extern_type;
404*700637cbSDimitry Andric  typedef mbstate_t state_type;
405*700637cbSDimitry Andric
406*700637cbSDimitry Andric  _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf16(size_t __refs, unsigned long __maxcode, codecvt_mode __mode)
407*700637cbSDimitry Andric      : codecvt<char32_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {}
408*700637cbSDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_POP
409*700637cbSDimitry Andric
410*700637cbSDimitry Andricprotected:
411*700637cbSDimitry Andric  result do_out(state_type& __st,
412*700637cbSDimitry Andric                const intern_type* __frm,
413*700637cbSDimitry Andric                const intern_type* __frm_end,
414*700637cbSDimitry Andric                const intern_type*& __frm_nxt,
415*700637cbSDimitry Andric                extern_type* __to,
416*700637cbSDimitry Andric                extern_type* __to_end,
417*700637cbSDimitry Andric                extern_type*& __to_nxt) const override;
418*700637cbSDimitry Andric  result do_in(state_type& __st,
419*700637cbSDimitry Andric               const extern_type* __frm,
420*700637cbSDimitry Andric               const extern_type* __frm_end,
421*700637cbSDimitry Andric               const extern_type*& __frm_nxt,
422*700637cbSDimitry Andric               intern_type* __to,
423*700637cbSDimitry Andric               intern_type* __to_end,
424*700637cbSDimitry Andric               intern_type*& __to_nxt) const override;
425*700637cbSDimitry Andric  result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
426*700637cbSDimitry Andric  int do_encoding() const _NOEXCEPT override;
427*700637cbSDimitry Andric  bool do_always_noconv() const _NOEXCEPT override;
428*700637cbSDimitry Andric  int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
429*700637cbSDimitry Andric  int do_max_length() const _NOEXCEPT override;
430*700637cbSDimitry Andric};
431*700637cbSDimitry Andric
432*700637cbSDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_PUSH
433*700637cbSDimitry Andrictemplate <class _Elem, unsigned long _Maxcode = 0x10ffff, codecvt_mode _Mode = (codecvt_mode)0>
434*700637cbSDimitry Andricclass _LIBCPP_TEMPLATE_VIS codecvt_utf16 : public __codecvt_utf16<_Elem, _Mode & little_endian> {
435*700637cbSDimitry Andricpublic:
436*700637cbSDimitry Andric  _LIBCPP_HIDE_FROM_ABI explicit codecvt_utf16(size_t __refs = 0)
437*700637cbSDimitry Andric      : __codecvt_utf16 < _Elem,
438*700637cbSDimitry Andric  _Mode & little_endian > (__refs, _Maxcode, _Mode) {}
439*700637cbSDimitry Andric
440*700637cbSDimitry Andric  _LIBCPP_HIDE_FROM_ABI ~codecvt_utf16() {}
441*700637cbSDimitry Andric};
442*700637cbSDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_POP
443*700637cbSDimitry Andric
444*700637cbSDimitry Andric// codecvt_utf8_utf16
445*700637cbSDimitry Andric
446*700637cbSDimitry Andrictemplate <class _Elem>
447*700637cbSDimitry Andricclass __codecvt_utf8_utf16;
448*700637cbSDimitry Andric
449*700637cbSDimitry Andric#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS
450*700637cbSDimitry Andrictemplate <>
451*700637cbSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf8_utf16<wchar_t> : public codecvt<wchar_t, char, mbstate_t> {
452*700637cbSDimitry Andric  unsigned long __maxcode_;
453*700637cbSDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_PUSH
454*700637cbSDimitry Andric  codecvt_mode __mode_;
455*700637cbSDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_POP
456*700637cbSDimitry Andric
457*700637cbSDimitry Andricpublic:
458*700637cbSDimitry Andric  typedef wchar_t intern_type;
459*700637cbSDimitry Andric  typedef char extern_type;
460*700637cbSDimitry Andric  typedef mbstate_t state_type;
461*700637cbSDimitry Andric
462*700637cbSDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_PUSH
463*700637cbSDimitry Andric  _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf8_utf16(size_t __refs, unsigned long __maxcode, codecvt_mode __mode)
464*700637cbSDimitry Andric      : codecvt<wchar_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {}
465*700637cbSDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_POP
466*700637cbSDimitry Andric
467*700637cbSDimitry Andricprotected:
468*700637cbSDimitry Andric  result do_out(state_type& __st,
469*700637cbSDimitry Andric                const intern_type* __frm,
470*700637cbSDimitry Andric                const intern_type* __frm_end,
471*700637cbSDimitry Andric                const intern_type*& __frm_nxt,
472*700637cbSDimitry Andric                extern_type* __to,
473*700637cbSDimitry Andric                extern_type* __to_end,
474*700637cbSDimitry Andric                extern_type*& __to_nxt) const override;
475*700637cbSDimitry Andric  result do_in(state_type& __st,
476*700637cbSDimitry Andric               const extern_type* __frm,
477*700637cbSDimitry Andric               const extern_type* __frm_end,
478*700637cbSDimitry Andric               const extern_type*& __frm_nxt,
479*700637cbSDimitry Andric               intern_type* __to,
480*700637cbSDimitry Andric               intern_type* __to_end,
481*700637cbSDimitry Andric               intern_type*& __to_nxt) const override;
482*700637cbSDimitry Andric  result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
483*700637cbSDimitry Andric  int do_encoding() const _NOEXCEPT override;
484*700637cbSDimitry Andric  bool do_always_noconv() const _NOEXCEPT override;
485*700637cbSDimitry Andric  int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
486*700637cbSDimitry Andric  int do_max_length() const _NOEXCEPT override;
487*700637cbSDimitry Andric};
488*700637cbSDimitry Andric#endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS
489*700637cbSDimitry Andric
490*700637cbSDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_PUSH
491*700637cbSDimitry Andrictemplate <>
492*700637cbSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf8_utf16<char32_t> : public codecvt<char32_t, char, mbstate_t> {
493*700637cbSDimitry Andric  unsigned long __maxcode_;
494*700637cbSDimitry Andric  codecvt_mode __mode_;
495*700637cbSDimitry Andric
496*700637cbSDimitry Andricpublic:
497*700637cbSDimitry Andric  typedef char32_t intern_type;
498*700637cbSDimitry Andric  typedef char extern_type;
499*700637cbSDimitry Andric  typedef mbstate_t state_type;
500*700637cbSDimitry Andric
501*700637cbSDimitry Andric  _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf8_utf16(size_t __refs, unsigned long __maxcode, codecvt_mode __mode)
502*700637cbSDimitry Andric      : codecvt<char32_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {}
503*700637cbSDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_POP
504*700637cbSDimitry Andric
505*700637cbSDimitry Andricprotected:
506*700637cbSDimitry Andric  result do_out(state_type& __st,
507*700637cbSDimitry Andric                const intern_type* __frm,
508*700637cbSDimitry Andric                const intern_type* __frm_end,
509*700637cbSDimitry Andric                const intern_type*& __frm_nxt,
510*700637cbSDimitry Andric                extern_type* __to,
511*700637cbSDimitry Andric                extern_type* __to_end,
512*700637cbSDimitry Andric                extern_type*& __to_nxt) const override;
513*700637cbSDimitry Andric  result do_in(state_type& __st,
514*700637cbSDimitry Andric               const extern_type* __frm,
515*700637cbSDimitry Andric               const extern_type* __frm_end,
516*700637cbSDimitry Andric               const extern_type*& __frm_nxt,
517*700637cbSDimitry Andric               intern_type* __to,
518*700637cbSDimitry Andric               intern_type* __to_end,
519*700637cbSDimitry Andric               intern_type*& __to_nxt) const override;
520*700637cbSDimitry Andric  result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
521*700637cbSDimitry Andric  int do_encoding() const _NOEXCEPT override;
522*700637cbSDimitry Andric  bool do_always_noconv() const _NOEXCEPT override;
523*700637cbSDimitry Andric  int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
524*700637cbSDimitry Andric  int do_max_length() const _NOEXCEPT override;
525*700637cbSDimitry Andric};
526*700637cbSDimitry Andric
527*700637cbSDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_PUSH
528*700637cbSDimitry Andrictemplate <>
529*700637cbSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf8_utf16<char16_t> : public codecvt<char16_t, char, mbstate_t> {
530*700637cbSDimitry Andric  unsigned long __maxcode_;
531*700637cbSDimitry Andric  codecvt_mode __mode_;
532*700637cbSDimitry Andric
533*700637cbSDimitry Andricpublic:
534*700637cbSDimitry Andric  typedef char16_t intern_type;
535*700637cbSDimitry Andric  typedef char extern_type;
536*700637cbSDimitry Andric  typedef mbstate_t state_type;
537*700637cbSDimitry Andric
538*700637cbSDimitry Andric  _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf8_utf16(size_t __refs, unsigned long __maxcode, codecvt_mode __mode)
539*700637cbSDimitry Andric      : codecvt<char16_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {}
540*700637cbSDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_POP
541*700637cbSDimitry Andric
542*700637cbSDimitry Andricprotected:
543*700637cbSDimitry Andric  result do_out(state_type& __st,
544*700637cbSDimitry Andric                const intern_type* __frm,
545*700637cbSDimitry Andric                const intern_type* __frm_end,
546*700637cbSDimitry Andric                const intern_type*& __frm_nxt,
547*700637cbSDimitry Andric                extern_type* __to,
548*700637cbSDimitry Andric                extern_type* __to_end,
549*700637cbSDimitry Andric                extern_type*& __to_nxt) const override;
550*700637cbSDimitry Andric  result do_in(state_type& __st,
551*700637cbSDimitry Andric               const extern_type* __frm,
552*700637cbSDimitry Andric               const extern_type* __frm_end,
553*700637cbSDimitry Andric               const extern_type*& __frm_nxt,
554*700637cbSDimitry Andric               intern_type* __to,
555*700637cbSDimitry Andric               intern_type* __to_end,
556*700637cbSDimitry Andric               intern_type*& __to_nxt) const override;
557*700637cbSDimitry Andric  result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
558*700637cbSDimitry Andric  int do_encoding() const _NOEXCEPT override;
559*700637cbSDimitry Andric  bool do_always_noconv() const _NOEXCEPT override;
560*700637cbSDimitry Andric  int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
561*700637cbSDimitry Andric  int do_max_length() const _NOEXCEPT override;
562*700637cbSDimitry Andric};
563*700637cbSDimitry Andric
564*700637cbSDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_PUSH
565*700637cbSDimitry Andrictemplate <class _Elem, unsigned long _Maxcode = 0x10ffff, codecvt_mode _Mode = (codecvt_mode)0>
566*700637cbSDimitry Andricclass _LIBCPP_TEMPLATE_VIS codecvt_utf8_utf16 : public __codecvt_utf8_utf16<_Elem> {
567*700637cbSDimitry Andricpublic:
568*700637cbSDimitry Andric  _LIBCPP_HIDE_FROM_ABI explicit codecvt_utf8_utf16(size_t __refs = 0)
569*700637cbSDimitry Andric      : __codecvt_utf8_utf16<_Elem>(__refs, _Maxcode, _Mode) {}
570*700637cbSDimitry Andric
571*700637cbSDimitry Andric  _LIBCPP_HIDE_FROM_ABI ~codecvt_utf8_utf16() {}
572*700637cbSDimitry Andric};
573*700637cbSDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_POP
574*700637cbSDimitry Andric
575*700637cbSDimitry Andric_LIBCPP_END_NAMESPACE_STD
576*700637cbSDimitry Andric
577*700637cbSDimitry Andric#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES)
578*700637cbSDimitry Andric#  include <__cxx03/atomic>
579*700637cbSDimitry Andric#  include <__cxx03/cstddef>
580*700637cbSDimitry Andric#  include <__cxx03/cstdlib>
581*700637cbSDimitry Andric#  include <__cxx03/cstring>
582*700637cbSDimitry Andric#  include <__cxx03/iosfwd>
583*700637cbSDimitry Andric#  include <__cxx03/limits>
584*700637cbSDimitry Andric#  include <__cxx03/mutex>
585*700637cbSDimitry Andric#  include <__cxx03/new>
586*700637cbSDimitry Andric#  include <__cxx03/stdexcept>
587*700637cbSDimitry Andric#  include <__cxx03/type_traits>
588*700637cbSDimitry Andric#  include <__cxx03/typeinfo>
589*700637cbSDimitry Andric#endif
590*700637cbSDimitry Andric
591*700637cbSDimitry Andric#endif // _LIBCPP___CXX03_CODECVT
592