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