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