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