xref: /freebsd/contrib/llvm-project/libcxx/include/codecvt (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
10b57cec5SDimitry Andric// -*- C++ -*-
2349cc55cSDimitry Andric//===----------------------------------------------------------------------===//
30b57cec5SDimitry Andric//
40b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
50b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information.
60b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
70b57cec5SDimitry Andric//
80b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
90b57cec5SDimitry Andric
100b57cec5SDimitry Andric#ifndef _LIBCPP_CODECVT
110b57cec5SDimitry Andric#define _LIBCPP_CODECVT
120b57cec5SDimitry Andric
130b57cec5SDimitry Andric/*
140b57cec5SDimitry Andric    codecvt synopsis
150b57cec5SDimitry Andric
160b57cec5SDimitry Andricnamespace std
170b57cec5SDimitry Andric{
180b57cec5SDimitry Andric
190b57cec5SDimitry Andricenum codecvt_mode
200b57cec5SDimitry Andric{
210b57cec5SDimitry Andric    consume_header = 4,
220b57cec5SDimitry Andric    generate_header = 2,
230b57cec5SDimitry Andric    little_endian = 1
240b57cec5SDimitry Andric};
250b57cec5SDimitry Andric
260b57cec5SDimitry Andrictemplate <class Elem, unsigned long Maxcode = 0x10ffff,
270b57cec5SDimitry Andric          codecvt_mode Mode = (codecvt_mode)0>
280b57cec5SDimitry Andricclass codecvt_utf8
290b57cec5SDimitry Andric    : public codecvt<Elem, char, mbstate_t>
300b57cec5SDimitry Andric{
310b57cec5SDimitry Andric    explicit codecvt_utf8(size_t refs = 0);
320b57cec5SDimitry Andric    ~codecvt_utf8();
330b57cec5SDimitry Andric};
340b57cec5SDimitry Andric
350b57cec5SDimitry Andrictemplate <class Elem, unsigned long Maxcode = 0x10ffff,
360b57cec5SDimitry Andric          codecvt_mode Mode = (codecvt_mode)0>
370b57cec5SDimitry Andricclass codecvt_utf16
380b57cec5SDimitry Andric    : public codecvt<Elem, char, mbstate_t>
390b57cec5SDimitry Andric{
400b57cec5SDimitry Andric    explicit codecvt_utf16(size_t refs = 0);
410b57cec5SDimitry Andric    ~codecvt_utf16();
420b57cec5SDimitry Andric};
430b57cec5SDimitry Andric
440b57cec5SDimitry Andrictemplate <class Elem, unsigned long Maxcode = 0x10ffff,
450b57cec5SDimitry Andric          codecvt_mode Mode = (codecvt_mode)0>
460b57cec5SDimitry Andricclass codecvt_utf8_utf16
470b57cec5SDimitry Andric    : public codecvt<Elem, char, mbstate_t>
480b57cec5SDimitry Andric{
490b57cec5SDimitry Andric    explicit codecvt_utf8_utf16(size_t refs = 0);
500b57cec5SDimitry Andric    ~codecvt_utf8_utf16();
510b57cec5SDimitry Andric};
520b57cec5SDimitry Andric
530b57cec5SDimitry Andric}  // std
540b57cec5SDimitry Andric
550b57cec5SDimitry Andric*/
560b57cec5SDimitry Andric
570b57cec5SDimitry Andric#include <__config>
580b57cec5SDimitry Andric#include <__locale>
5904eeddc0SDimitry Andric#include <version>
600b57cec5SDimitry Andric
610b57cec5SDimitry Andric#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
620b57cec5SDimitry Andric#  pragma GCC system_header
630b57cec5SDimitry Andric#endif
640b57cec5SDimitry Andric
655f757f3fSDimitry Andric#if _LIBCPP_STD_VER < 26 || defined(_LIBCPP_BUILDING_LIBRARY) || defined(_LIBCPP_ENABLE_CXX26_REMOVED_CODECVT)
665f757f3fSDimitry Andric
670b57cec5SDimitry Andric_LIBCPP_BEGIN_NAMESPACE_STD
680b57cec5SDimitry Andric
69cb14a3feSDimitry Andricenum _LIBCPP_DEPRECATED_IN_CXX17 codecvt_mode { consume_header = 4, generate_header = 2, little_endian = 1 };
700b57cec5SDimitry Andric
710b57cec5SDimitry Andric// codecvt_utf8
720b57cec5SDimitry Andric
73cb14a3feSDimitry Andrictemplate <class _Elem>
74cb14a3feSDimitry Andricclass __codecvt_utf8;
750b57cec5SDimitry Andric
76349cc55cSDimitry Andric#  ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS
770b57cec5SDimitry Andrictemplate <>
78cb14a3feSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf8<wchar_t> : public codecvt<wchar_t, char, mbstate_t> {
79bdd1243dSDimitry Andric  unsigned long __maxcode_;
8081ad6265SDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_PUSH
81bdd1243dSDimitry Andric  codecvt_mode __mode_;
8281ad6265SDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_POP
83cb14a3feSDimitry Andric
840b57cec5SDimitry Andricpublic:
850b57cec5SDimitry Andric  typedef wchar_t intern_type;
860b57cec5SDimitry Andric  typedef char extern_type;
870b57cec5SDimitry Andric  typedef mbstate_t state_type;
880b57cec5SDimitry Andric
8981ad6265SDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_PUSH
90cb14a3feSDimitry Andric  _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf8(size_t __refs, unsigned long __maxcode, codecvt_mode __mode)
91cb14a3feSDimitry Andric      : codecvt<wchar_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {}
9281ad6265SDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_POP
93cb14a3feSDimitry Andric
940b57cec5SDimitry Andricprotected:
95bdd1243dSDimitry Andric  result do_out(state_type& __st,
96cb14a3feSDimitry Andric                const intern_type* __frm,
97cb14a3feSDimitry Andric                const intern_type* __frm_end,
98cb14a3feSDimitry Andric                const intern_type*& __frm_nxt,
99cb14a3feSDimitry Andric                extern_type* __to,
100cb14a3feSDimitry Andric                extern_type* __to_end,
101cb14a3feSDimitry Andric                extern_type*& __to_nxt) const override;
102bdd1243dSDimitry Andric  result do_in(state_type& __st,
103cb14a3feSDimitry Andric               const extern_type* __frm,
104cb14a3feSDimitry Andric               const extern_type* __frm_end,
105cb14a3feSDimitry Andric               const extern_type*& __frm_nxt,
106cb14a3feSDimitry Andric               intern_type* __to,
107cb14a3feSDimitry Andric               intern_type* __to_end,
108cb14a3feSDimitry Andric               intern_type*& __to_nxt) const override;
109cb14a3feSDimitry Andric  result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
110bdd1243dSDimitry Andric  int do_encoding() const _NOEXCEPT override;
111bdd1243dSDimitry Andric  bool do_always_noconv() const _NOEXCEPT override;
112bdd1243dSDimitry Andric  int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
113bdd1243dSDimitry Andric  int do_max_length() const _NOEXCEPT override;
1140b57cec5SDimitry Andric};
115349cc55cSDimitry Andric#  endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS
1160b57cec5SDimitry Andric
117e8d8bef9SDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_PUSH
1180b57cec5SDimitry Andrictemplate <>
119cb14a3feSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf8<char16_t> : public codecvt<char16_t, char, mbstate_t> {
120bdd1243dSDimitry Andric  unsigned long __maxcode_;
121bdd1243dSDimitry Andric  codecvt_mode __mode_;
122cb14a3feSDimitry Andric
1230b57cec5SDimitry Andricpublic:
1240b57cec5SDimitry Andric  typedef char16_t intern_type;
1250b57cec5SDimitry Andric  typedef char extern_type;
1260b57cec5SDimitry Andric  typedef mbstate_t state_type;
1270b57cec5SDimitry Andric
128cb14a3feSDimitry Andric  _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf8(size_t __refs, unsigned long __maxcode, codecvt_mode __mode)
129cb14a3feSDimitry Andric      : codecvt<char16_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {}
130e8d8bef9SDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_POP
131e8d8bef9SDimitry Andric
1320b57cec5SDimitry Andricprotected:
133bdd1243dSDimitry Andric  result do_out(state_type& __st,
134cb14a3feSDimitry Andric                const intern_type* __frm,
135cb14a3feSDimitry Andric                const intern_type* __frm_end,
136cb14a3feSDimitry Andric                const intern_type*& __frm_nxt,
137cb14a3feSDimitry Andric                extern_type* __to,
138cb14a3feSDimitry Andric                extern_type* __to_end,
139cb14a3feSDimitry Andric                extern_type*& __to_nxt) const override;
140bdd1243dSDimitry Andric  result do_in(state_type& __st,
141cb14a3feSDimitry Andric               const extern_type* __frm,
142cb14a3feSDimitry Andric               const extern_type* __frm_end,
143cb14a3feSDimitry Andric               const extern_type*& __frm_nxt,
144cb14a3feSDimitry Andric               intern_type* __to,
145cb14a3feSDimitry Andric               intern_type* __to_end,
146cb14a3feSDimitry Andric               intern_type*& __to_nxt) const override;
147cb14a3feSDimitry Andric  result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
148bdd1243dSDimitry Andric  int do_encoding() const _NOEXCEPT override;
149bdd1243dSDimitry Andric  bool do_always_noconv() const _NOEXCEPT override;
150bdd1243dSDimitry Andric  int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
151bdd1243dSDimitry Andric  int do_max_length() const _NOEXCEPT override;
1520b57cec5SDimitry Andric};
1530b57cec5SDimitry Andric
154e8d8bef9SDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_PUSH
1550b57cec5SDimitry Andrictemplate <>
156cb14a3feSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf8<char32_t> : public codecvt<char32_t, char, mbstate_t> {
157bdd1243dSDimitry Andric  unsigned long __maxcode_;
158bdd1243dSDimitry Andric  codecvt_mode __mode_;
159cb14a3feSDimitry Andric
1600b57cec5SDimitry Andricpublic:
1610b57cec5SDimitry Andric  typedef char32_t intern_type;
1620b57cec5SDimitry Andric  typedef char extern_type;
1630b57cec5SDimitry Andric  typedef mbstate_t state_type;
1640b57cec5SDimitry Andric
165cb14a3feSDimitry Andric  _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf8(size_t __refs, unsigned long __maxcode, codecvt_mode __mode)
166cb14a3feSDimitry Andric      : codecvt<char32_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {}
167e8d8bef9SDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_POP
168e8d8bef9SDimitry Andric
1690b57cec5SDimitry Andricprotected:
170bdd1243dSDimitry Andric  result do_out(state_type& __st,
171cb14a3feSDimitry Andric                const intern_type* __frm,
172cb14a3feSDimitry Andric                const intern_type* __frm_end,
173cb14a3feSDimitry Andric                const intern_type*& __frm_nxt,
174cb14a3feSDimitry Andric                extern_type* __to,
175cb14a3feSDimitry Andric                extern_type* __to_end,
176cb14a3feSDimitry Andric                extern_type*& __to_nxt) const override;
177bdd1243dSDimitry Andric  result do_in(state_type& __st,
178cb14a3feSDimitry Andric               const extern_type* __frm,
179cb14a3feSDimitry Andric               const extern_type* __frm_end,
180cb14a3feSDimitry Andric               const extern_type*& __frm_nxt,
181cb14a3feSDimitry Andric               intern_type* __to,
182cb14a3feSDimitry Andric               intern_type* __to_end,
183cb14a3feSDimitry Andric               intern_type*& __to_nxt) const override;
184cb14a3feSDimitry Andric  result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
185bdd1243dSDimitry Andric  int do_encoding() const _NOEXCEPT override;
186bdd1243dSDimitry Andric  bool do_always_noconv() const _NOEXCEPT override;
187bdd1243dSDimitry Andric  int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
188bdd1243dSDimitry Andric  int do_max_length() const _NOEXCEPT override;
1890b57cec5SDimitry Andric};
1900b57cec5SDimitry Andric
19181ad6265SDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_PUSH
192cb14a3feSDimitry Andrictemplate <class _Elem, unsigned long _Maxcode = 0x10ffff, codecvt_mode _Mode = (codecvt_mode)0>
193cb14a3feSDimitry Andricclass _LIBCPP_TEMPLATE_VIS _LIBCPP_DEPRECATED_IN_CXX17 codecvt_utf8 : public __codecvt_utf8<_Elem> {
1940b57cec5SDimitry Andricpublic:
195cb14a3feSDimitry Andric  _LIBCPP_HIDE_FROM_ABI explicit codecvt_utf8(size_t __refs = 0) : __codecvt_utf8<_Elem>(__refs, _Maxcode, _Mode) {}
1960b57cec5SDimitry Andric
197cb14a3feSDimitry Andric  _LIBCPP_HIDE_FROM_ABI ~codecvt_utf8() {}
1980b57cec5SDimitry Andric};
19981ad6265SDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_POP
2000b57cec5SDimitry Andric
2010b57cec5SDimitry Andric// codecvt_utf16
2020b57cec5SDimitry Andric
203cb14a3feSDimitry Andrictemplate <class _Elem, bool _LittleEndian>
204cb14a3feSDimitry Andricclass __codecvt_utf16;
2050b57cec5SDimitry Andric
206349cc55cSDimitry Andric#  ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS
2070b57cec5SDimitry Andrictemplate <>
208cb14a3feSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf16<wchar_t, false> : public codecvt<wchar_t, char, mbstate_t> {
209bdd1243dSDimitry Andric  unsigned long __maxcode_;
21081ad6265SDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_PUSH
211bdd1243dSDimitry Andric  codecvt_mode __mode_;
21281ad6265SDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_POP
213cb14a3feSDimitry Andric
2140b57cec5SDimitry Andricpublic:
2150b57cec5SDimitry Andric  typedef wchar_t intern_type;
2160b57cec5SDimitry Andric  typedef char extern_type;
2170b57cec5SDimitry Andric  typedef mbstate_t state_type;
2180b57cec5SDimitry Andric
21981ad6265SDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_PUSH
220cb14a3feSDimitry Andric  _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf16(size_t __refs, unsigned long __maxcode, codecvt_mode __mode)
221cb14a3feSDimitry Andric      : codecvt<wchar_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {}
22281ad6265SDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_POP
223cb14a3feSDimitry Andric
2240b57cec5SDimitry Andricprotected:
225bdd1243dSDimitry Andric  result do_out(state_type& __st,
226cb14a3feSDimitry Andric                const intern_type* __frm,
227cb14a3feSDimitry Andric                const intern_type* __frm_end,
228cb14a3feSDimitry Andric                const intern_type*& __frm_nxt,
229cb14a3feSDimitry Andric                extern_type* __to,
230cb14a3feSDimitry Andric                extern_type* __to_end,
231cb14a3feSDimitry Andric                extern_type*& __to_nxt) const override;
232bdd1243dSDimitry Andric  result do_in(state_type& __st,
233cb14a3feSDimitry Andric               const extern_type* __frm,
234cb14a3feSDimitry Andric               const extern_type* __frm_end,
235cb14a3feSDimitry Andric               const extern_type*& __frm_nxt,
236cb14a3feSDimitry Andric               intern_type* __to,
237cb14a3feSDimitry Andric               intern_type* __to_end,
238cb14a3feSDimitry Andric               intern_type*& __to_nxt) const override;
239cb14a3feSDimitry Andric  result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
240bdd1243dSDimitry Andric  int do_encoding() const _NOEXCEPT override;
241bdd1243dSDimitry Andric  bool do_always_noconv() const _NOEXCEPT override;
242cb14a3feSDimitry Andric  int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
243bdd1243dSDimitry Andric  int do_max_length() const _NOEXCEPT override;
2440b57cec5SDimitry Andric};
2450b57cec5SDimitry Andric
2460b57cec5SDimitry Andrictemplate <>
247cb14a3feSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf16<wchar_t, true> : public codecvt<wchar_t, char, mbstate_t> {
248bdd1243dSDimitry Andric  unsigned long __maxcode_;
24981ad6265SDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_PUSH
250bdd1243dSDimitry Andric  codecvt_mode __mode_;
25181ad6265SDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_POP
252cb14a3feSDimitry Andric
2530b57cec5SDimitry Andricpublic:
2540b57cec5SDimitry Andric  typedef wchar_t intern_type;
2550b57cec5SDimitry Andric  typedef char extern_type;
2560b57cec5SDimitry Andric  typedef mbstate_t state_type;
2570b57cec5SDimitry Andric
25881ad6265SDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_PUSH
259cb14a3feSDimitry Andric  _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf16(size_t __refs, unsigned long __maxcode, codecvt_mode __mode)
260cb14a3feSDimitry Andric      : codecvt<wchar_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {}
26181ad6265SDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_POP
262cb14a3feSDimitry Andric
2630b57cec5SDimitry Andricprotected:
264bdd1243dSDimitry Andric  result do_out(state_type& __st,
265cb14a3feSDimitry Andric                const intern_type* __frm,
266cb14a3feSDimitry Andric                const intern_type* __frm_end,
267cb14a3feSDimitry Andric                const intern_type*& __frm_nxt,
268cb14a3feSDimitry Andric                extern_type* __to,
269cb14a3feSDimitry Andric                extern_type* __to_end,
270cb14a3feSDimitry Andric                extern_type*& __to_nxt) const override;
271bdd1243dSDimitry Andric  result do_in(state_type& __st,
272cb14a3feSDimitry Andric               const extern_type* __frm,
273cb14a3feSDimitry Andric               const extern_type* __frm_end,
274cb14a3feSDimitry Andric               const extern_type*& __frm_nxt,
275cb14a3feSDimitry Andric               intern_type* __to,
276cb14a3feSDimitry Andric               intern_type* __to_end,
277cb14a3feSDimitry Andric               intern_type*& __to_nxt) const override;
278cb14a3feSDimitry Andric  result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
279bdd1243dSDimitry Andric  int do_encoding() const _NOEXCEPT override;
280bdd1243dSDimitry Andric  bool do_always_noconv() const _NOEXCEPT override;
281bdd1243dSDimitry Andric  int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
282bdd1243dSDimitry Andric  int do_max_length() const _NOEXCEPT override;
2830b57cec5SDimitry Andric};
284349cc55cSDimitry Andric#  endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS
2850b57cec5SDimitry Andric
286e8d8bef9SDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_PUSH
2870b57cec5SDimitry Andrictemplate <>
288cb14a3feSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf16<char16_t, false> : public codecvt<char16_t, char, mbstate_t> {
289bdd1243dSDimitry Andric  unsigned long __maxcode_;
290bdd1243dSDimitry Andric  codecvt_mode __mode_;
291cb14a3feSDimitry Andric
2920b57cec5SDimitry Andricpublic:
2930b57cec5SDimitry Andric  typedef char16_t intern_type;
2940b57cec5SDimitry Andric  typedef char extern_type;
2950b57cec5SDimitry Andric  typedef mbstate_t state_type;
2960b57cec5SDimitry Andric
297cb14a3feSDimitry Andric  _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf16(size_t __refs, unsigned long __maxcode, codecvt_mode __mode)
298cb14a3feSDimitry Andric      : codecvt<char16_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {}
299e8d8bef9SDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_POP
300e8d8bef9SDimitry Andric
3010b57cec5SDimitry Andricprotected:
302bdd1243dSDimitry Andric  result do_out(state_type& __st,
303cb14a3feSDimitry Andric                const intern_type* __frm,
304cb14a3feSDimitry Andric                const intern_type* __frm_end,
305cb14a3feSDimitry Andric                const intern_type*& __frm_nxt,
306cb14a3feSDimitry Andric                extern_type* __to,
307cb14a3feSDimitry Andric                extern_type* __to_end,
308cb14a3feSDimitry Andric                extern_type*& __to_nxt) const override;
309bdd1243dSDimitry Andric  result do_in(state_type& __st,
310cb14a3feSDimitry Andric               const extern_type* __frm,
311cb14a3feSDimitry Andric               const extern_type* __frm_end,
312cb14a3feSDimitry Andric               const extern_type*& __frm_nxt,
313cb14a3feSDimitry Andric               intern_type* __to,
314cb14a3feSDimitry Andric               intern_type* __to_end,
315cb14a3feSDimitry Andric               intern_type*& __to_nxt) const override;
316cb14a3feSDimitry Andric  result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
317bdd1243dSDimitry Andric  int do_encoding() const _NOEXCEPT override;
318bdd1243dSDimitry Andric  bool do_always_noconv() const _NOEXCEPT override;
319bdd1243dSDimitry Andric  int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
320bdd1243dSDimitry Andric  int do_max_length() const _NOEXCEPT override;
3210b57cec5SDimitry Andric};
3220b57cec5SDimitry Andric
323e8d8bef9SDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_PUSH
3240b57cec5SDimitry Andrictemplate <>
325cb14a3feSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf16<char16_t, true> : public codecvt<char16_t, char, mbstate_t> {
326bdd1243dSDimitry Andric  unsigned long __maxcode_;
327bdd1243dSDimitry Andric  codecvt_mode __mode_;
328cb14a3feSDimitry Andric
3290b57cec5SDimitry Andricpublic:
3300b57cec5SDimitry Andric  typedef char16_t intern_type;
3310b57cec5SDimitry Andric  typedef char extern_type;
3320b57cec5SDimitry Andric  typedef mbstate_t state_type;
3330b57cec5SDimitry Andric
334cb14a3feSDimitry Andric  _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf16(size_t __refs, unsigned long __maxcode, codecvt_mode __mode)
335cb14a3feSDimitry Andric      : codecvt<char16_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {}
336e8d8bef9SDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_POP
337e8d8bef9SDimitry Andric
3380b57cec5SDimitry Andricprotected:
339bdd1243dSDimitry Andric  result do_out(state_type& __st,
340cb14a3feSDimitry Andric                const intern_type* __frm,
341cb14a3feSDimitry Andric                const intern_type* __frm_end,
342cb14a3feSDimitry Andric                const intern_type*& __frm_nxt,
343cb14a3feSDimitry Andric                extern_type* __to,
344cb14a3feSDimitry Andric                extern_type* __to_end,
345cb14a3feSDimitry Andric                extern_type*& __to_nxt) const override;
346bdd1243dSDimitry Andric  result do_in(state_type& __st,
347cb14a3feSDimitry Andric               const extern_type* __frm,
348cb14a3feSDimitry Andric               const extern_type* __frm_end,
349cb14a3feSDimitry Andric               const extern_type*& __frm_nxt,
350cb14a3feSDimitry Andric               intern_type* __to,
351cb14a3feSDimitry Andric               intern_type* __to_end,
352cb14a3feSDimitry Andric               intern_type*& __to_nxt) const override;
353cb14a3feSDimitry Andric  result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
354bdd1243dSDimitry Andric  int do_encoding() const _NOEXCEPT override;
355bdd1243dSDimitry Andric  bool do_always_noconv() const _NOEXCEPT override;
356bdd1243dSDimitry Andric  int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
357bdd1243dSDimitry Andric  int do_max_length() const _NOEXCEPT override;
3580b57cec5SDimitry Andric};
3590b57cec5SDimitry Andric
360e8d8bef9SDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_PUSH
3610b57cec5SDimitry Andrictemplate <>
362cb14a3feSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf16<char32_t, false> : public codecvt<char32_t, char, mbstate_t> {
363bdd1243dSDimitry Andric  unsigned long __maxcode_;
364bdd1243dSDimitry Andric  codecvt_mode __mode_;
365cb14a3feSDimitry Andric
3660b57cec5SDimitry Andricpublic:
3670b57cec5SDimitry Andric  typedef char32_t intern_type;
3680b57cec5SDimitry Andric  typedef char extern_type;
3690b57cec5SDimitry Andric  typedef mbstate_t state_type;
3700b57cec5SDimitry Andric
371cb14a3feSDimitry Andric  _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf16(size_t __refs, unsigned long __maxcode, codecvt_mode __mode)
372cb14a3feSDimitry Andric      : codecvt<char32_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {}
373e8d8bef9SDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_POP
374e8d8bef9SDimitry Andric
3750b57cec5SDimitry Andricprotected:
376bdd1243dSDimitry Andric  result do_out(state_type& __st,
377cb14a3feSDimitry Andric                const intern_type* __frm,
378cb14a3feSDimitry Andric                const intern_type* __frm_end,
379cb14a3feSDimitry Andric                const intern_type*& __frm_nxt,
380cb14a3feSDimitry Andric                extern_type* __to,
381cb14a3feSDimitry Andric                extern_type* __to_end,
382cb14a3feSDimitry Andric                extern_type*& __to_nxt) const override;
383bdd1243dSDimitry Andric  result do_in(state_type& __st,
384cb14a3feSDimitry Andric               const extern_type* __frm,
385cb14a3feSDimitry Andric               const extern_type* __frm_end,
386cb14a3feSDimitry Andric               const extern_type*& __frm_nxt,
387cb14a3feSDimitry Andric               intern_type* __to,
388cb14a3feSDimitry Andric               intern_type* __to_end,
389cb14a3feSDimitry Andric               intern_type*& __to_nxt) const override;
390cb14a3feSDimitry Andric  result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
391bdd1243dSDimitry Andric  int do_encoding() const _NOEXCEPT override;
392bdd1243dSDimitry Andric  bool do_always_noconv() const _NOEXCEPT override;
393bdd1243dSDimitry Andric  int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
394bdd1243dSDimitry Andric  int do_max_length() const _NOEXCEPT override;
3950b57cec5SDimitry Andric};
3960b57cec5SDimitry Andric
397e8d8bef9SDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_PUSH
3980b57cec5SDimitry Andrictemplate <>
399cb14a3feSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf16<char32_t, true> : public codecvt<char32_t, char, mbstate_t> {
400bdd1243dSDimitry Andric  unsigned long __maxcode_;
401bdd1243dSDimitry Andric  codecvt_mode __mode_;
402cb14a3feSDimitry Andric
4030b57cec5SDimitry Andricpublic:
4040b57cec5SDimitry Andric  typedef char32_t intern_type;
4050b57cec5SDimitry Andric  typedef char extern_type;
4060b57cec5SDimitry Andric  typedef mbstate_t state_type;
4070b57cec5SDimitry Andric
408cb14a3feSDimitry Andric  _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf16(size_t __refs, unsigned long __maxcode, codecvt_mode __mode)
409cb14a3feSDimitry Andric      : codecvt<char32_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {}
410e8d8bef9SDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_POP
411e8d8bef9SDimitry Andric
4120b57cec5SDimitry Andricprotected:
413bdd1243dSDimitry Andric  result do_out(state_type& __st,
414cb14a3feSDimitry Andric                const intern_type* __frm,
415cb14a3feSDimitry Andric                const intern_type* __frm_end,
416cb14a3feSDimitry Andric                const intern_type*& __frm_nxt,
417cb14a3feSDimitry Andric                extern_type* __to,
418cb14a3feSDimitry Andric                extern_type* __to_end,
419cb14a3feSDimitry Andric                extern_type*& __to_nxt) const override;
420bdd1243dSDimitry Andric  result do_in(state_type& __st,
421cb14a3feSDimitry Andric               const extern_type* __frm,
422cb14a3feSDimitry Andric               const extern_type* __frm_end,
423cb14a3feSDimitry Andric               const extern_type*& __frm_nxt,
424cb14a3feSDimitry Andric               intern_type* __to,
425cb14a3feSDimitry Andric               intern_type* __to_end,
426cb14a3feSDimitry Andric               intern_type*& __to_nxt) const override;
427cb14a3feSDimitry Andric  result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
428bdd1243dSDimitry Andric  int do_encoding() const _NOEXCEPT override;
429bdd1243dSDimitry Andric  bool do_always_noconv() const _NOEXCEPT override;
430bdd1243dSDimitry Andric  int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
431bdd1243dSDimitry Andric  int do_max_length() const _NOEXCEPT override;
4320b57cec5SDimitry Andric};
4330b57cec5SDimitry Andric
43481ad6265SDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_PUSH
435cb14a3feSDimitry Andrictemplate <class _Elem, unsigned long _Maxcode = 0x10ffff, codecvt_mode _Mode = (codecvt_mode)0>
436*0fca6ea1SDimitry Andricclass _LIBCPP_TEMPLATE_VIS
437*0fca6ea1SDimitry Andric_LIBCPP_DEPRECATED_IN_CXX17 codecvt_utf16 : public __codecvt_utf16<_Elem, _Mode & little_endian> {
4380b57cec5SDimitry Andricpublic:
439cb14a3feSDimitry Andric  _LIBCPP_HIDE_FROM_ABI explicit codecvt_utf16(size_t __refs = 0)
4400b57cec5SDimitry Andric      : __codecvt_utf16<_Elem, _Mode & little_endian>(__refs, _Maxcode, _Mode) {}
4410b57cec5SDimitry Andric
442cb14a3feSDimitry Andric  _LIBCPP_HIDE_FROM_ABI ~codecvt_utf16() {}
4430b57cec5SDimitry Andric};
44481ad6265SDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_POP
4450b57cec5SDimitry Andric
4460b57cec5SDimitry Andric// codecvt_utf8_utf16
4470b57cec5SDimitry Andric
448cb14a3feSDimitry Andrictemplate <class _Elem>
449cb14a3feSDimitry Andricclass __codecvt_utf8_utf16;
4500b57cec5SDimitry Andric
451349cc55cSDimitry Andric#  ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS
4520b57cec5SDimitry Andrictemplate <>
453cb14a3feSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf8_utf16<wchar_t> : public codecvt<wchar_t, char, mbstate_t> {
454bdd1243dSDimitry Andric  unsigned long __maxcode_;
45581ad6265SDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_PUSH
456bdd1243dSDimitry Andric  codecvt_mode __mode_;
45781ad6265SDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_POP
458cb14a3feSDimitry Andric
4590b57cec5SDimitry Andricpublic:
4600b57cec5SDimitry Andric  typedef wchar_t intern_type;
4610b57cec5SDimitry Andric  typedef char extern_type;
4620b57cec5SDimitry Andric  typedef mbstate_t state_type;
4630b57cec5SDimitry Andric
46481ad6265SDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_PUSH
465cb14a3feSDimitry Andric  _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf8_utf16(size_t __refs, unsigned long __maxcode, codecvt_mode __mode)
466cb14a3feSDimitry Andric      : codecvt<wchar_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {}
46781ad6265SDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_POP
468cb14a3feSDimitry Andric
4690b57cec5SDimitry Andricprotected:
470bdd1243dSDimitry Andric  result do_out(state_type& __st,
471cb14a3feSDimitry Andric                const intern_type* __frm,
472cb14a3feSDimitry Andric                const intern_type* __frm_end,
473cb14a3feSDimitry Andric                const intern_type*& __frm_nxt,
474cb14a3feSDimitry Andric                extern_type* __to,
475cb14a3feSDimitry Andric                extern_type* __to_end,
476cb14a3feSDimitry Andric                extern_type*& __to_nxt) const override;
477bdd1243dSDimitry Andric  result do_in(state_type& __st,
478cb14a3feSDimitry Andric               const extern_type* __frm,
479cb14a3feSDimitry Andric               const extern_type* __frm_end,
480cb14a3feSDimitry Andric               const extern_type*& __frm_nxt,
481cb14a3feSDimitry Andric               intern_type* __to,
482cb14a3feSDimitry Andric               intern_type* __to_end,
483cb14a3feSDimitry Andric               intern_type*& __to_nxt) const override;
484cb14a3feSDimitry Andric  result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
485bdd1243dSDimitry Andric  int do_encoding() const _NOEXCEPT override;
486bdd1243dSDimitry Andric  bool do_always_noconv() const _NOEXCEPT override;
487bdd1243dSDimitry Andric  int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
488bdd1243dSDimitry Andric  int do_max_length() const _NOEXCEPT override;
4890b57cec5SDimitry Andric};
490349cc55cSDimitry Andric#  endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS
4910b57cec5SDimitry Andric
492e8d8bef9SDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_PUSH
4930b57cec5SDimitry Andrictemplate <>
494cb14a3feSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf8_utf16<char32_t> : public codecvt<char32_t, char, mbstate_t> {
495bdd1243dSDimitry Andric  unsigned long __maxcode_;
496bdd1243dSDimitry Andric  codecvt_mode __mode_;
497cb14a3feSDimitry Andric
4980b57cec5SDimitry Andricpublic:
4990b57cec5SDimitry Andric  typedef char32_t intern_type;
5000b57cec5SDimitry Andric  typedef char extern_type;
5010b57cec5SDimitry Andric  typedef mbstate_t state_type;
5020b57cec5SDimitry Andric
503cb14a3feSDimitry Andric  _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf8_utf16(size_t __refs, unsigned long __maxcode, codecvt_mode __mode)
504cb14a3feSDimitry Andric      : codecvt<char32_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {}
505e8d8bef9SDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_POP
506e8d8bef9SDimitry Andric
5070b57cec5SDimitry Andricprotected:
508bdd1243dSDimitry Andric  result do_out(state_type& __st,
509cb14a3feSDimitry Andric                const intern_type* __frm,
510cb14a3feSDimitry Andric                const intern_type* __frm_end,
511cb14a3feSDimitry Andric                const intern_type*& __frm_nxt,
512cb14a3feSDimitry Andric                extern_type* __to,
513cb14a3feSDimitry Andric                extern_type* __to_end,
514cb14a3feSDimitry Andric                extern_type*& __to_nxt) const override;
515bdd1243dSDimitry Andric  result do_in(state_type& __st,
516cb14a3feSDimitry Andric               const extern_type* __frm,
517cb14a3feSDimitry Andric               const extern_type* __frm_end,
518cb14a3feSDimitry Andric               const extern_type*& __frm_nxt,
519cb14a3feSDimitry Andric               intern_type* __to,
520cb14a3feSDimitry Andric               intern_type* __to_end,
521cb14a3feSDimitry Andric               intern_type*& __to_nxt) const override;
522cb14a3feSDimitry Andric  result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
523bdd1243dSDimitry Andric  int do_encoding() const _NOEXCEPT override;
524bdd1243dSDimitry Andric  bool do_always_noconv() const _NOEXCEPT override;
525bdd1243dSDimitry Andric  int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
526bdd1243dSDimitry Andric  int do_max_length() const _NOEXCEPT override;
5270b57cec5SDimitry Andric};
5280b57cec5SDimitry Andric
529e8d8bef9SDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_PUSH
5300b57cec5SDimitry Andrictemplate <>
531cb14a3feSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf8_utf16<char16_t> : public codecvt<char16_t, char, mbstate_t> {
532bdd1243dSDimitry Andric  unsigned long __maxcode_;
533bdd1243dSDimitry Andric  codecvt_mode __mode_;
534cb14a3feSDimitry Andric
5350b57cec5SDimitry Andricpublic:
5360b57cec5SDimitry Andric  typedef char16_t intern_type;
5370b57cec5SDimitry Andric  typedef char extern_type;
5380b57cec5SDimitry Andric  typedef mbstate_t state_type;
5390b57cec5SDimitry Andric
540cb14a3feSDimitry Andric  _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf8_utf16(size_t __refs, unsigned long __maxcode, codecvt_mode __mode)
541cb14a3feSDimitry Andric      : codecvt<char16_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {}
542e8d8bef9SDimitry Andric  _LIBCPP_SUPPRESS_DEPRECATED_POP
543e8d8bef9SDimitry Andric
5440b57cec5SDimitry Andricprotected:
545bdd1243dSDimitry Andric  result do_out(state_type& __st,
546cb14a3feSDimitry Andric                const intern_type* __frm,
547cb14a3feSDimitry Andric                const intern_type* __frm_end,
548cb14a3feSDimitry Andric                const intern_type*& __frm_nxt,
549cb14a3feSDimitry Andric                extern_type* __to,
550cb14a3feSDimitry Andric                extern_type* __to_end,
551cb14a3feSDimitry Andric                extern_type*& __to_nxt) const override;
552bdd1243dSDimitry Andric  result do_in(state_type& __st,
553cb14a3feSDimitry Andric               const extern_type* __frm,
554cb14a3feSDimitry Andric               const extern_type* __frm_end,
555cb14a3feSDimitry Andric               const extern_type*& __frm_nxt,
556cb14a3feSDimitry Andric               intern_type* __to,
557cb14a3feSDimitry Andric               intern_type* __to_end,
558cb14a3feSDimitry Andric               intern_type*& __to_nxt) const override;
559cb14a3feSDimitry Andric  result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
560bdd1243dSDimitry Andric  int do_encoding() const _NOEXCEPT override;
561bdd1243dSDimitry Andric  bool do_always_noconv() const _NOEXCEPT override;
562bdd1243dSDimitry Andric  int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
563bdd1243dSDimitry Andric  int do_max_length() const _NOEXCEPT override;
5640b57cec5SDimitry Andric};
5650b57cec5SDimitry Andric
56681ad6265SDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_PUSH
567cb14a3feSDimitry Andrictemplate <class _Elem, unsigned long _Maxcode = 0x10ffff, codecvt_mode _Mode = (codecvt_mode)0>
568cb14a3feSDimitry Andricclass _LIBCPP_TEMPLATE_VIS _LIBCPP_DEPRECATED_IN_CXX17 codecvt_utf8_utf16 : public __codecvt_utf8_utf16<_Elem> {
5690b57cec5SDimitry Andricpublic:
570cb14a3feSDimitry Andric  _LIBCPP_HIDE_FROM_ABI explicit codecvt_utf8_utf16(size_t __refs = 0)
5710b57cec5SDimitry Andric      : __codecvt_utf8_utf16<_Elem>(__refs, _Maxcode, _Mode) {}
5720b57cec5SDimitry Andric
573cb14a3feSDimitry Andric  _LIBCPP_HIDE_FROM_ABI ~codecvt_utf8_utf16() {}
5740b57cec5SDimitry Andric};
57581ad6265SDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_POP
5760b57cec5SDimitry Andric
5770b57cec5SDimitry Andric_LIBCPP_END_NAMESPACE_STD
5780b57cec5SDimitry Andric
5795f757f3fSDimitry Andric#endif // _LIBCPP_STD_VER < 26 || defined(_LIBCPP_BUILDING_LIBRARY) || defined(_LIBCPP_ENABLE_CXX26_REMOVED_CODECVT)
5805f757f3fSDimitry Andric
581bdd1243dSDimitry Andric#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
582bdd1243dSDimitry Andric#  include <atomic>
583bdd1243dSDimitry Andric#  include <concepts>
584bdd1243dSDimitry Andric#  include <cstddef>
585bdd1243dSDimitry Andric#  include <cstdlib>
586bdd1243dSDimitry Andric#  include <cstring>
587bdd1243dSDimitry Andric#  include <initializer_list>
588bdd1243dSDimitry Andric#  include <iosfwd>
589bdd1243dSDimitry Andric#  include <limits>
5905f757f3fSDimitry Andric#  include <mutex>
591bdd1243dSDimitry Andric#  include <new>
592bdd1243dSDimitry Andric#  include <stdexcept>
593bdd1243dSDimitry Andric#  include <type_traits>
594bdd1243dSDimitry Andric#  include <typeinfo>
595bdd1243dSDimitry Andric#endif
596bdd1243dSDimitry Andric
5970b57cec5SDimitry Andric#endif // _LIBCPP_CODECVT
598