xref: /openbsd-src/gnu/llvm/libcxx/include/codecvt (revision 4bdff4bed0e3d54e55670334c7d0077db4170f86)
146035553Spatrick// -*- C++ -*-
2*4bdff4beSrobert//===----------------------------------------------------------------------===//
346035553Spatrick//
446035553Spatrick// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
546035553Spatrick// See https://llvm.org/LICENSE.txt for license information.
646035553Spatrick// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
746035553Spatrick//
846035553Spatrick//===----------------------------------------------------------------------===//
946035553Spatrick
1046035553Spatrick#ifndef _LIBCPP_CODECVT
1146035553Spatrick#define _LIBCPP_CODECVT
1246035553Spatrick
1346035553Spatrick/*
1446035553Spatrick    codecvt synopsis
1546035553Spatrick
1646035553Spatricknamespace std
1746035553Spatrick{
1846035553Spatrick
1946035553Spatrickenum codecvt_mode
2046035553Spatrick{
2146035553Spatrick    consume_header = 4,
2246035553Spatrick    generate_header = 2,
2346035553Spatrick    little_endian = 1
2446035553Spatrick};
2546035553Spatrick
2646035553Spatricktemplate <class Elem, unsigned long Maxcode = 0x10ffff,
2746035553Spatrick          codecvt_mode Mode = (codecvt_mode)0>
2846035553Spatrickclass codecvt_utf8
2946035553Spatrick    : public codecvt<Elem, char, mbstate_t>
3046035553Spatrick{
3146035553Spatrick    explicit codecvt_utf8(size_t refs = 0);
3246035553Spatrick    ~codecvt_utf8();
3346035553Spatrick};
3446035553Spatrick
3546035553Spatricktemplate <class Elem, unsigned long Maxcode = 0x10ffff,
3646035553Spatrick          codecvt_mode Mode = (codecvt_mode)0>
3746035553Spatrickclass codecvt_utf16
3846035553Spatrick    : public codecvt<Elem, char, mbstate_t>
3946035553Spatrick{
4046035553Spatrick    explicit codecvt_utf16(size_t refs = 0);
4146035553Spatrick    ~codecvt_utf16();
4246035553Spatrick};
4346035553Spatrick
4446035553Spatricktemplate <class Elem, unsigned long Maxcode = 0x10ffff,
4546035553Spatrick          codecvt_mode Mode = (codecvt_mode)0>
4646035553Spatrickclass codecvt_utf8_utf16
4746035553Spatrick    : public codecvt<Elem, char, mbstate_t>
4846035553Spatrick{
4946035553Spatrick    explicit codecvt_utf8_utf16(size_t refs = 0);
5046035553Spatrick    ~codecvt_utf8_utf16();
5146035553Spatrick};
5246035553Spatrick
5346035553Spatrick}  // std
5446035553Spatrick
5546035553Spatrick*/
5646035553Spatrick
57*4bdff4beSrobert#include <__assert> // all public C++ headers provide the assertion handler
5846035553Spatrick#include <__config>
5946035553Spatrick#include <__locale>
60*4bdff4beSrobert#include <version>
6146035553Spatrick
6246035553Spatrick#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
6346035553Spatrick#  pragma GCC system_header
6446035553Spatrick#endif
6546035553Spatrick
6646035553Spatrick_LIBCPP_BEGIN_NAMESPACE_STD
6746035553Spatrick
68*4bdff4beSrobertenum _LIBCPP_DEPRECATED_IN_CXX17 codecvt_mode
6946035553Spatrick{
7046035553Spatrick    consume_header = 4,
7146035553Spatrick    generate_header = 2,
7246035553Spatrick    little_endian = 1
7346035553Spatrick};
7446035553Spatrick
7546035553Spatrick// codecvt_utf8
7646035553Spatrick
7746035553Spatricktemplate <class _Elem> class __codecvt_utf8;
7846035553Spatrick
79*4bdff4beSrobert#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS
8046035553Spatricktemplate <>
8146035553Spatrickclass _LIBCPP_TYPE_VIS __codecvt_utf8<wchar_t>
8246035553Spatrick    : public codecvt<wchar_t, char, mbstate_t>
8346035553Spatrick{
84*4bdff4beSrobert    unsigned long __maxcode_;
85*4bdff4beSrobert_LIBCPP_SUPPRESS_DEPRECATED_PUSH
86*4bdff4beSrobert    codecvt_mode __mode_;
87*4bdff4beSrobert_LIBCPP_SUPPRESS_DEPRECATED_POP
8846035553Spatrickpublic:
8946035553Spatrick    typedef wchar_t   intern_type;
9046035553Spatrick    typedef char      extern_type;
9146035553Spatrick    typedef mbstate_t state_type;
9246035553Spatrick
93*4bdff4beSrobert_LIBCPP_SUPPRESS_DEPRECATED_PUSH
9446035553Spatrick    _LIBCPP_INLINE_VISIBILITY
95*4bdff4beSrobert    explicit __codecvt_utf8(size_t __refs, unsigned long __maxcode,
96*4bdff4beSrobert                            codecvt_mode __mode)
97*4bdff4beSrobert        : codecvt<wchar_t, char, mbstate_t>(__refs), __maxcode_(__maxcode),
98*4bdff4beSrobert          __mode_(__mode) {}
99*4bdff4beSrobert_LIBCPP_SUPPRESS_DEPRECATED_POP
10046035553Spatrickprotected:
101*4bdff4beSrobert    result do_out(state_type& __st,
10246035553Spatrick                  const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
103*4bdff4beSrobert                  extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
104*4bdff4beSrobert    result do_in(state_type& __st,
10546035553Spatrick                 const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
106*4bdff4beSrobert                 intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const override;
107*4bdff4beSrobert    result do_unshift(state_type& __st,
108*4bdff4beSrobert                      extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
109*4bdff4beSrobert    int do_encoding() const _NOEXCEPT override;
110*4bdff4beSrobert    bool do_always_noconv() const _NOEXCEPT override;
111*4bdff4beSrobert    int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
112*4bdff4beSrobert    int do_max_length() const _NOEXCEPT override;
11346035553Spatrick};
114*4bdff4beSrobert#endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS
11546035553Spatrick
11676d0caaeSpatrick_LIBCPP_SUPPRESS_DEPRECATED_PUSH
11746035553Spatricktemplate <>
11846035553Spatrickclass _LIBCPP_TYPE_VIS __codecvt_utf8<char16_t>
11946035553Spatrick    : public codecvt<char16_t, char, mbstate_t>
12046035553Spatrick{
121*4bdff4beSrobert    unsigned long __maxcode_;
122*4bdff4beSrobert    codecvt_mode __mode_;
12346035553Spatrickpublic:
12446035553Spatrick    typedef char16_t  intern_type;
12546035553Spatrick    typedef char      extern_type;
12646035553Spatrick    typedef mbstate_t state_type;
12746035553Spatrick
12846035553Spatrick    _LIBCPP_INLINE_VISIBILITY
129*4bdff4beSrobert    explicit __codecvt_utf8(size_t __refs, unsigned long __maxcode,
130*4bdff4beSrobert                            codecvt_mode __mode)
131*4bdff4beSrobert        : codecvt<char16_t, char, mbstate_t>(__refs), __maxcode_(__maxcode),
132*4bdff4beSrobert          __mode_(__mode) {}
13376d0caaeSpatrick_LIBCPP_SUPPRESS_DEPRECATED_POP
13476d0caaeSpatrick
13546035553Spatrickprotected:
136*4bdff4beSrobert     result do_out(state_type& __st,
13746035553Spatrick                   const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
138*4bdff4beSrobert                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
139*4bdff4beSrobert     result do_in(state_type& __st,
14046035553Spatrick                  const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
141*4bdff4beSrobert                  intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const override;
142*4bdff4beSrobert     result do_unshift(state_type& __st,
143*4bdff4beSrobert                       extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
144*4bdff4beSrobert     int do_encoding() const _NOEXCEPT override;
145*4bdff4beSrobert     bool do_always_noconv() const _NOEXCEPT override;
146*4bdff4beSrobert     int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
147*4bdff4beSrobert     int do_max_length() const _NOEXCEPT override;
14846035553Spatrick};
14946035553Spatrick
15076d0caaeSpatrick_LIBCPP_SUPPRESS_DEPRECATED_PUSH
15146035553Spatricktemplate <>
15246035553Spatrickclass _LIBCPP_TYPE_VIS __codecvt_utf8<char32_t>
15346035553Spatrick    : public codecvt<char32_t, char, mbstate_t>
15446035553Spatrick{
155*4bdff4beSrobert    unsigned long __maxcode_;
156*4bdff4beSrobert    codecvt_mode __mode_;
15746035553Spatrickpublic:
15846035553Spatrick    typedef char32_t  intern_type;
15946035553Spatrick    typedef char      extern_type;
16046035553Spatrick    typedef mbstate_t state_type;
16146035553Spatrick
16246035553Spatrick    _LIBCPP_INLINE_VISIBILITY
163*4bdff4beSrobert    explicit __codecvt_utf8(size_t __refs, unsigned long __maxcode,
164*4bdff4beSrobert                            codecvt_mode __mode)
165*4bdff4beSrobert        : codecvt<char32_t, char, mbstate_t>(__refs), __maxcode_(__maxcode),
166*4bdff4beSrobert          __mode_(__mode) {}
16776d0caaeSpatrick_LIBCPP_SUPPRESS_DEPRECATED_POP
16876d0caaeSpatrick
16946035553Spatrickprotected:
170*4bdff4beSrobert     result do_out(state_type& __st,
17146035553Spatrick                   const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
172*4bdff4beSrobert                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
173*4bdff4beSrobert     result do_in(state_type& __st,
17446035553Spatrick                  const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
175*4bdff4beSrobert                  intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const override;
176*4bdff4beSrobert     result do_unshift(state_type& __st,
177*4bdff4beSrobert                       extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
178*4bdff4beSrobert     int do_encoding() const _NOEXCEPT override;
179*4bdff4beSrobert     bool do_always_noconv() const _NOEXCEPT override;
180*4bdff4beSrobert     int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
181*4bdff4beSrobert     int do_max_length() const _NOEXCEPT override;
18246035553Spatrick};
18346035553Spatrick
184*4bdff4beSrobert_LIBCPP_SUPPRESS_DEPRECATED_PUSH
18546035553Spatricktemplate <class _Elem, unsigned long _Maxcode = 0x10ffff,
18646035553Spatrick          codecvt_mode _Mode = (codecvt_mode)0>
187*4bdff4beSrobertclass _LIBCPP_TEMPLATE_VIS _LIBCPP_DEPRECATED_IN_CXX17 codecvt_utf8
18846035553Spatrick    : public __codecvt_utf8<_Elem>
18946035553Spatrick{
19046035553Spatrickpublic:
19146035553Spatrick    _LIBCPP_INLINE_VISIBILITY
19246035553Spatrick    explicit codecvt_utf8(size_t __refs = 0)
19346035553Spatrick        : __codecvt_utf8<_Elem>(__refs, _Maxcode, _Mode) {}
19446035553Spatrick
19546035553Spatrick    _LIBCPP_INLINE_VISIBILITY
19646035553Spatrick    ~codecvt_utf8() {}
19746035553Spatrick};
198*4bdff4beSrobert_LIBCPP_SUPPRESS_DEPRECATED_POP
19946035553Spatrick
20046035553Spatrick// codecvt_utf16
20146035553Spatrick
20246035553Spatricktemplate <class _Elem, bool _LittleEndian> class __codecvt_utf16;
20346035553Spatrick
204*4bdff4beSrobert#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS
20546035553Spatricktemplate <>
20646035553Spatrickclass _LIBCPP_TYPE_VIS __codecvt_utf16<wchar_t, false>
20746035553Spatrick    : public codecvt<wchar_t, char, mbstate_t>
20846035553Spatrick{
209*4bdff4beSrobert    unsigned long __maxcode_;
210*4bdff4beSrobert_LIBCPP_SUPPRESS_DEPRECATED_PUSH
211*4bdff4beSrobert    codecvt_mode __mode_;
212*4bdff4beSrobert_LIBCPP_SUPPRESS_DEPRECATED_POP
21346035553Spatrickpublic:
21446035553Spatrick    typedef wchar_t   intern_type;
21546035553Spatrick    typedef char      extern_type;
21646035553Spatrick    typedef mbstate_t state_type;
21746035553Spatrick
218*4bdff4beSrobert_LIBCPP_SUPPRESS_DEPRECATED_PUSH
21946035553Spatrick    _LIBCPP_INLINE_VISIBILITY
220*4bdff4beSrobert    explicit __codecvt_utf16(size_t __refs, unsigned long __maxcode,
221*4bdff4beSrobert                            codecvt_mode __mode)
222*4bdff4beSrobert        : codecvt<wchar_t, char, mbstate_t>(__refs), __maxcode_(__maxcode),
223*4bdff4beSrobert          __mode_(__mode) {}
224*4bdff4beSrobert_LIBCPP_SUPPRESS_DEPRECATED_POP
22546035553Spatrickprotected:
226*4bdff4beSrobert     result do_out(state_type& __st,
22746035553Spatrick                   const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
228*4bdff4beSrobert                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
229*4bdff4beSrobert     result do_in(state_type& __st,
23046035553Spatrick                  const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
231*4bdff4beSrobert                  intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const override;
232*4bdff4beSrobert     result do_unshift(state_type& __st,
233*4bdff4beSrobert                       extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
234*4bdff4beSrobert     int do_encoding() const _NOEXCEPT override;
235*4bdff4beSrobert     bool do_always_noconv() const _NOEXCEPT override;
236*4bdff4beSrobert     int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
237*4bdff4beSrobert                          size_t __mx) const override;
238*4bdff4beSrobert     int do_max_length() const _NOEXCEPT override;
23946035553Spatrick};
24046035553Spatrick
24146035553Spatricktemplate <>
24246035553Spatrickclass _LIBCPP_TYPE_VIS __codecvt_utf16<wchar_t, true>
24346035553Spatrick    : public codecvt<wchar_t, char, mbstate_t>
24446035553Spatrick{
245*4bdff4beSrobert    unsigned long __maxcode_;
246*4bdff4beSrobert_LIBCPP_SUPPRESS_DEPRECATED_PUSH
247*4bdff4beSrobert    codecvt_mode __mode_;
248*4bdff4beSrobert_LIBCPP_SUPPRESS_DEPRECATED_POP
24946035553Spatrickpublic:
25046035553Spatrick    typedef wchar_t   intern_type;
25146035553Spatrick    typedef char      extern_type;
25246035553Spatrick    typedef mbstate_t state_type;
25346035553Spatrick
254*4bdff4beSrobert_LIBCPP_SUPPRESS_DEPRECATED_PUSH
25546035553Spatrick    _LIBCPP_INLINE_VISIBILITY
256*4bdff4beSrobert    explicit __codecvt_utf16(size_t __refs, unsigned long __maxcode,
257*4bdff4beSrobert                            codecvt_mode __mode)
258*4bdff4beSrobert        : codecvt<wchar_t, char, mbstate_t>(__refs), __maxcode_(__maxcode),
259*4bdff4beSrobert          __mode_(__mode) {}
260*4bdff4beSrobert_LIBCPP_SUPPRESS_DEPRECATED_POP
26146035553Spatrickprotected:
262*4bdff4beSrobert     result do_out(state_type& __st,
26346035553Spatrick                   const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
264*4bdff4beSrobert                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
265*4bdff4beSrobert     result do_in(state_type& __st,
26646035553Spatrick                  const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
267*4bdff4beSrobert                  intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const override;
268*4bdff4beSrobert     result do_unshift(state_type& __st,
269*4bdff4beSrobert                       extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
270*4bdff4beSrobert     int do_encoding() const _NOEXCEPT override;
271*4bdff4beSrobert     bool do_always_noconv() const _NOEXCEPT override;
272*4bdff4beSrobert     int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
273*4bdff4beSrobert     int do_max_length() const _NOEXCEPT override;
27446035553Spatrick};
275*4bdff4beSrobert#endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS
27646035553Spatrick
27776d0caaeSpatrick_LIBCPP_SUPPRESS_DEPRECATED_PUSH
27846035553Spatricktemplate <>
27946035553Spatrickclass _LIBCPP_TYPE_VIS __codecvt_utf16<char16_t, false>
28046035553Spatrick    : public codecvt<char16_t, char, mbstate_t>
28146035553Spatrick{
282*4bdff4beSrobert    unsigned long __maxcode_;
283*4bdff4beSrobert    codecvt_mode __mode_;
28446035553Spatrickpublic:
28546035553Spatrick    typedef char16_t  intern_type;
28646035553Spatrick    typedef char      extern_type;
28746035553Spatrick    typedef mbstate_t state_type;
28846035553Spatrick
28946035553Spatrick    _LIBCPP_INLINE_VISIBILITY
290*4bdff4beSrobert    explicit __codecvt_utf16(size_t __refs, unsigned long __maxcode,
291*4bdff4beSrobert                            codecvt_mode __mode)
292*4bdff4beSrobert        : codecvt<char16_t, char, mbstate_t>(__refs), __maxcode_(__maxcode),
293*4bdff4beSrobert          __mode_(__mode) {}
29476d0caaeSpatrick_LIBCPP_SUPPRESS_DEPRECATED_POP
29576d0caaeSpatrick
29646035553Spatrickprotected:
297*4bdff4beSrobert     result do_out(state_type& __st,
29846035553Spatrick                   const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
299*4bdff4beSrobert                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
300*4bdff4beSrobert     result do_in(state_type& __st,
30146035553Spatrick                  const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
302*4bdff4beSrobert                  intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const override;
303*4bdff4beSrobert     result do_unshift(state_type& __st,
304*4bdff4beSrobert                       extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
305*4bdff4beSrobert     int do_encoding() const _NOEXCEPT override;
306*4bdff4beSrobert     bool do_always_noconv() const _NOEXCEPT override;
307*4bdff4beSrobert     int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
308*4bdff4beSrobert     int do_max_length() const _NOEXCEPT override;
30946035553Spatrick};
31046035553Spatrick
31176d0caaeSpatrick_LIBCPP_SUPPRESS_DEPRECATED_PUSH
31246035553Spatricktemplate <>
31346035553Spatrickclass _LIBCPP_TYPE_VIS __codecvt_utf16<char16_t, true>
31446035553Spatrick    : public codecvt<char16_t, char, mbstate_t>
31546035553Spatrick{
316*4bdff4beSrobert    unsigned long __maxcode_;
317*4bdff4beSrobert    codecvt_mode __mode_;
31846035553Spatrickpublic:
31946035553Spatrick    typedef char16_t  intern_type;
32046035553Spatrick    typedef char      extern_type;
32146035553Spatrick    typedef mbstate_t state_type;
32246035553Spatrick
32346035553Spatrick    _LIBCPP_INLINE_VISIBILITY
324*4bdff4beSrobert    explicit __codecvt_utf16(size_t __refs, unsigned long __maxcode,
325*4bdff4beSrobert                            codecvt_mode __mode)
326*4bdff4beSrobert        : codecvt<char16_t, char, mbstate_t>(__refs), __maxcode_(__maxcode),
327*4bdff4beSrobert          __mode_(__mode) {}
32876d0caaeSpatrick_LIBCPP_SUPPRESS_DEPRECATED_POP
32976d0caaeSpatrick
33046035553Spatrickprotected:
331*4bdff4beSrobert     result do_out(state_type& __st,
33246035553Spatrick                   const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
333*4bdff4beSrobert                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
334*4bdff4beSrobert     result do_in(state_type& __st,
33546035553Spatrick                  const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
336*4bdff4beSrobert                  intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const override;
337*4bdff4beSrobert     result do_unshift(state_type& __st,
338*4bdff4beSrobert                       extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
339*4bdff4beSrobert     int do_encoding() const _NOEXCEPT override;
340*4bdff4beSrobert     bool do_always_noconv() const _NOEXCEPT override;
341*4bdff4beSrobert     int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
342*4bdff4beSrobert     int do_max_length() const _NOEXCEPT override;
34346035553Spatrick};
34446035553Spatrick
34576d0caaeSpatrick_LIBCPP_SUPPRESS_DEPRECATED_PUSH
34646035553Spatricktemplate <>
34746035553Spatrickclass _LIBCPP_TYPE_VIS __codecvt_utf16<char32_t, false>
34846035553Spatrick    : public codecvt<char32_t, char, mbstate_t>
34946035553Spatrick{
350*4bdff4beSrobert    unsigned long __maxcode_;
351*4bdff4beSrobert    codecvt_mode __mode_;
35246035553Spatrickpublic:
35346035553Spatrick    typedef char32_t  intern_type;
35446035553Spatrick    typedef char      extern_type;
35546035553Spatrick    typedef mbstate_t state_type;
35646035553Spatrick
35746035553Spatrick    _LIBCPP_INLINE_VISIBILITY
358*4bdff4beSrobert    explicit __codecvt_utf16(size_t __refs, unsigned long __maxcode,
359*4bdff4beSrobert                            codecvt_mode __mode)
360*4bdff4beSrobert        : codecvt<char32_t, char, mbstate_t>(__refs), __maxcode_(__maxcode),
361*4bdff4beSrobert          __mode_(__mode) {}
36276d0caaeSpatrick_LIBCPP_SUPPRESS_DEPRECATED_POP
36376d0caaeSpatrick
36446035553Spatrickprotected:
365*4bdff4beSrobert     result do_out(state_type& __st,
36646035553Spatrick                   const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
367*4bdff4beSrobert                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
368*4bdff4beSrobert     result do_in(state_type& __st,
36946035553Spatrick                  const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
370*4bdff4beSrobert                  intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const override;
371*4bdff4beSrobert     result do_unshift(state_type& __st,
372*4bdff4beSrobert                       extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
373*4bdff4beSrobert     int do_encoding() const _NOEXCEPT override;
374*4bdff4beSrobert     bool do_always_noconv() const _NOEXCEPT override;
375*4bdff4beSrobert     int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
376*4bdff4beSrobert     int do_max_length() const _NOEXCEPT override;
37746035553Spatrick};
37846035553Spatrick
37976d0caaeSpatrick_LIBCPP_SUPPRESS_DEPRECATED_PUSH
38046035553Spatricktemplate <>
38146035553Spatrickclass _LIBCPP_TYPE_VIS __codecvt_utf16<char32_t, true>
38246035553Spatrick    : public codecvt<char32_t, char, mbstate_t>
38346035553Spatrick{
384*4bdff4beSrobert    unsigned long __maxcode_;
385*4bdff4beSrobert    codecvt_mode __mode_;
38646035553Spatrickpublic:
38746035553Spatrick    typedef char32_t  intern_type;
38846035553Spatrick    typedef char      extern_type;
38946035553Spatrick    typedef mbstate_t state_type;
39046035553Spatrick
39146035553Spatrick    _LIBCPP_INLINE_VISIBILITY
392*4bdff4beSrobert    explicit __codecvt_utf16(size_t __refs, unsigned long __maxcode,
393*4bdff4beSrobert                            codecvt_mode __mode)
394*4bdff4beSrobert        : codecvt<char32_t, char, mbstate_t>(__refs), __maxcode_(__maxcode),
395*4bdff4beSrobert          __mode_(__mode) {}
39676d0caaeSpatrick_LIBCPP_SUPPRESS_DEPRECATED_POP
39776d0caaeSpatrick
39846035553Spatrickprotected:
399*4bdff4beSrobert     result do_out(state_type& __st,
40046035553Spatrick                   const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
401*4bdff4beSrobert                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
402*4bdff4beSrobert     result do_in(state_type& __st,
40346035553Spatrick                  const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
404*4bdff4beSrobert                  intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const override;
405*4bdff4beSrobert     result do_unshift(state_type& __st,
406*4bdff4beSrobert                       extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
407*4bdff4beSrobert     int do_encoding() const _NOEXCEPT override;
408*4bdff4beSrobert     bool do_always_noconv() const _NOEXCEPT override;
409*4bdff4beSrobert     int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
410*4bdff4beSrobert     int do_max_length() const _NOEXCEPT override;
41146035553Spatrick};
41246035553Spatrick
413*4bdff4beSrobert_LIBCPP_SUPPRESS_DEPRECATED_PUSH
41446035553Spatricktemplate <class _Elem, unsigned long _Maxcode = 0x10ffff,
41546035553Spatrick          codecvt_mode _Mode = (codecvt_mode)0>
416*4bdff4beSrobertclass _LIBCPP_TEMPLATE_VIS _LIBCPP_DEPRECATED_IN_CXX17 codecvt_utf16
41746035553Spatrick    : public __codecvt_utf16<_Elem, _Mode & little_endian>
41846035553Spatrick{
41946035553Spatrickpublic:
42046035553Spatrick    _LIBCPP_INLINE_VISIBILITY
42146035553Spatrick    explicit codecvt_utf16(size_t __refs = 0)
42246035553Spatrick        : __codecvt_utf16<_Elem, _Mode & little_endian>(__refs, _Maxcode, _Mode) {}
42346035553Spatrick
42446035553Spatrick    _LIBCPP_INLINE_VISIBILITY
42546035553Spatrick    ~codecvt_utf16() {}
42646035553Spatrick};
427*4bdff4beSrobert_LIBCPP_SUPPRESS_DEPRECATED_POP
42846035553Spatrick
42946035553Spatrick// codecvt_utf8_utf16
43046035553Spatrick
43146035553Spatricktemplate <class _Elem> class __codecvt_utf8_utf16;
43246035553Spatrick
433*4bdff4beSrobert#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS
43446035553Spatricktemplate <>
43546035553Spatrickclass _LIBCPP_TYPE_VIS __codecvt_utf8_utf16<wchar_t>
43646035553Spatrick    : public codecvt<wchar_t, char, mbstate_t>
43746035553Spatrick{
438*4bdff4beSrobert    unsigned long __maxcode_;
439*4bdff4beSrobert_LIBCPP_SUPPRESS_DEPRECATED_PUSH
440*4bdff4beSrobert    codecvt_mode __mode_;
441*4bdff4beSrobert_LIBCPP_SUPPRESS_DEPRECATED_POP
44246035553Spatrickpublic:
44346035553Spatrick    typedef wchar_t   intern_type;
44446035553Spatrick    typedef char      extern_type;
44546035553Spatrick    typedef mbstate_t state_type;
44646035553Spatrick
447*4bdff4beSrobert_LIBCPP_SUPPRESS_DEPRECATED_PUSH
44846035553Spatrick    _LIBCPP_INLINE_VISIBILITY
449*4bdff4beSrobert    explicit __codecvt_utf8_utf16(size_t __refs, unsigned long __maxcode,
450*4bdff4beSrobert                            codecvt_mode __mode)
451*4bdff4beSrobert        : codecvt<wchar_t, char, mbstate_t>(__refs), __maxcode_(__maxcode),
452*4bdff4beSrobert          __mode_(__mode) {}
453*4bdff4beSrobert_LIBCPP_SUPPRESS_DEPRECATED_POP
45446035553Spatrickprotected:
455*4bdff4beSrobert     result do_out(state_type& __st,
45646035553Spatrick                   const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
457*4bdff4beSrobert                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
458*4bdff4beSrobert     result do_in(state_type& __st,
45946035553Spatrick                  const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
460*4bdff4beSrobert                  intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const override;
461*4bdff4beSrobert     result do_unshift(state_type& __st,
462*4bdff4beSrobert                       extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
463*4bdff4beSrobert     int do_encoding() const _NOEXCEPT override;
464*4bdff4beSrobert     bool do_always_noconv() const _NOEXCEPT override;
465*4bdff4beSrobert     int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
466*4bdff4beSrobert     int do_max_length() const _NOEXCEPT override;
46746035553Spatrick};
468*4bdff4beSrobert#endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS
46946035553Spatrick
47076d0caaeSpatrick_LIBCPP_SUPPRESS_DEPRECATED_PUSH
47146035553Spatricktemplate <>
47246035553Spatrickclass _LIBCPP_TYPE_VIS __codecvt_utf8_utf16<char32_t>
47346035553Spatrick    : public codecvt<char32_t, char, mbstate_t>
47446035553Spatrick{
475*4bdff4beSrobert    unsigned long __maxcode_;
476*4bdff4beSrobert    codecvt_mode __mode_;
47746035553Spatrickpublic:
47846035553Spatrick    typedef char32_t  intern_type;
47946035553Spatrick    typedef char      extern_type;
48046035553Spatrick    typedef mbstate_t state_type;
48146035553Spatrick
48246035553Spatrick    _LIBCPP_INLINE_VISIBILITY
483*4bdff4beSrobert    explicit __codecvt_utf8_utf16(size_t __refs, unsigned long __maxcode,
484*4bdff4beSrobert                            codecvt_mode __mode)
485*4bdff4beSrobert        : codecvt<char32_t, char, mbstate_t>(__refs), __maxcode_(__maxcode),
486*4bdff4beSrobert          __mode_(__mode) {}
48776d0caaeSpatrick_LIBCPP_SUPPRESS_DEPRECATED_POP
48876d0caaeSpatrick
48946035553Spatrickprotected:
490*4bdff4beSrobert     result do_out(state_type& __st,
49146035553Spatrick                   const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
492*4bdff4beSrobert                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
493*4bdff4beSrobert     result do_in(state_type& __st,
49446035553Spatrick                  const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
495*4bdff4beSrobert                  intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const override;
496*4bdff4beSrobert     result do_unshift(state_type& __st,
497*4bdff4beSrobert                       extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
498*4bdff4beSrobert     int do_encoding() const _NOEXCEPT override;
499*4bdff4beSrobert     bool do_always_noconv() const _NOEXCEPT override;
500*4bdff4beSrobert     int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
501*4bdff4beSrobert     int do_max_length() const _NOEXCEPT override;
50246035553Spatrick};
50346035553Spatrick
50476d0caaeSpatrick_LIBCPP_SUPPRESS_DEPRECATED_PUSH
50546035553Spatricktemplate <>
50646035553Spatrickclass _LIBCPP_TYPE_VIS __codecvt_utf8_utf16<char16_t>
50746035553Spatrick    : public codecvt<char16_t, char, mbstate_t>
50846035553Spatrick{
509*4bdff4beSrobert    unsigned long __maxcode_;
510*4bdff4beSrobert    codecvt_mode __mode_;
51146035553Spatrickpublic:
51246035553Spatrick    typedef char16_t  intern_type;
51346035553Spatrick    typedef char      extern_type;
51446035553Spatrick    typedef mbstate_t state_type;
51546035553Spatrick
51646035553Spatrick    _LIBCPP_INLINE_VISIBILITY
517*4bdff4beSrobert    explicit __codecvt_utf8_utf16(size_t __refs, unsigned long __maxcode,
518*4bdff4beSrobert                            codecvt_mode __mode)
519*4bdff4beSrobert        : codecvt<char16_t, char, mbstate_t>(__refs), __maxcode_(__maxcode),
520*4bdff4beSrobert          __mode_(__mode) {}
52176d0caaeSpatrick_LIBCPP_SUPPRESS_DEPRECATED_POP
52276d0caaeSpatrick
52346035553Spatrickprotected:
524*4bdff4beSrobert     result do_out(state_type& __st,
52546035553Spatrick                   const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
526*4bdff4beSrobert                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
527*4bdff4beSrobert     result do_in(state_type& __st,
52846035553Spatrick                  const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
529*4bdff4beSrobert                  intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const override;
530*4bdff4beSrobert     result do_unshift(state_type& __st,
531*4bdff4beSrobert                       extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override;
532*4bdff4beSrobert     int do_encoding() const _NOEXCEPT override;
533*4bdff4beSrobert     bool do_always_noconv() const _NOEXCEPT override;
534*4bdff4beSrobert     int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override;
535*4bdff4beSrobert     int do_max_length() const _NOEXCEPT override;
53646035553Spatrick};
53746035553Spatrick
538*4bdff4beSrobert_LIBCPP_SUPPRESS_DEPRECATED_PUSH
53946035553Spatricktemplate <class _Elem, unsigned long _Maxcode = 0x10ffff,
54046035553Spatrick          codecvt_mode _Mode = (codecvt_mode)0>
541*4bdff4beSrobertclass _LIBCPP_TEMPLATE_VIS _LIBCPP_DEPRECATED_IN_CXX17 codecvt_utf8_utf16
54246035553Spatrick    : public __codecvt_utf8_utf16<_Elem>
54346035553Spatrick{
54446035553Spatrickpublic:
54546035553Spatrick    _LIBCPP_INLINE_VISIBILITY
54646035553Spatrick    explicit codecvt_utf8_utf16(size_t __refs = 0)
54746035553Spatrick        : __codecvt_utf8_utf16<_Elem>(__refs, _Maxcode, _Mode) {}
54846035553Spatrick
54946035553Spatrick    _LIBCPP_INLINE_VISIBILITY
55046035553Spatrick    ~codecvt_utf8_utf16() {}
55146035553Spatrick};
552*4bdff4beSrobert_LIBCPP_SUPPRESS_DEPRECATED_POP
55346035553Spatrick
55446035553Spatrick_LIBCPP_END_NAMESPACE_STD
55546035553Spatrick
556*4bdff4beSrobert#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
557*4bdff4beSrobert#  include <atomic>
558*4bdff4beSrobert#  include <concepts>
559*4bdff4beSrobert#  include <cstddef>
560*4bdff4beSrobert#  include <cstdlib>
561*4bdff4beSrobert#  include <cstring>
562*4bdff4beSrobert#  include <initializer_list>
563*4bdff4beSrobert#  include <iosfwd>
564*4bdff4beSrobert#  include <limits>
565*4bdff4beSrobert#  include <new>
566*4bdff4beSrobert#  include <stdexcept>
567*4bdff4beSrobert#  include <type_traits>
568*4bdff4beSrobert#  include <typeinfo>
569*4bdff4beSrobert#endif
570*4bdff4beSrobert
57146035553Spatrick#endif // _LIBCPP_CODECVT
572