10c17e32eSHoward Hinnant// -*- C++ -*-
2eb8650a7SLouis Dionne//===----------------------------------------------------------------------===//
30c17e32eSHoward Hinnant//
457b08b09SChandler Carruth// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
557b08b09SChandler Carruth// See https://llvm.org/LICENSE.txt for license information.
657b08b09SChandler Carruth// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
70c17e32eSHoward Hinnant//
80c17e32eSHoward Hinnant//===----------------------------------------------------------------------===//
90c17e32eSHoward Hinnant
100c17e32eSHoward Hinnant#ifndef _LIBCPP_CODECVT
110c17e32eSHoward Hinnant#define _LIBCPP_CODECVT
120c17e32eSHoward Hinnant
130c17e32eSHoward Hinnant/*
140c17e32eSHoward Hinnant    codecvt synopsis
150c17e32eSHoward Hinnant
160c17e32eSHoward Hinnantnamespace std
170c17e32eSHoward Hinnant{
180c17e32eSHoward Hinnant
190c17e32eSHoward Hinnantenum codecvt_mode
200c17e32eSHoward Hinnant{
210c17e32eSHoward Hinnant    consume_header = 4,
220c17e32eSHoward Hinnant    generate_header = 2,
230c17e32eSHoward Hinnant    little_endian = 1
240c17e32eSHoward Hinnant};
250c17e32eSHoward Hinnant
260c17e32eSHoward Hinnanttemplate <class Elem, unsigned long Maxcode = 0x10ffff,
270c17e32eSHoward Hinnant          codecvt_mode Mode = (codecvt_mode)0>
280c17e32eSHoward Hinnantclass codecvt_utf8
290c17e32eSHoward Hinnant    : public codecvt<Elem, char, mbstate_t>
300c17e32eSHoward Hinnant{
315320c2b5SMarshall Clow    explicit codecvt_utf8(size_t refs = 0);
325320c2b5SMarshall Clow    ~codecvt_utf8();
330c17e32eSHoward Hinnant};
340c17e32eSHoward Hinnant
350c17e32eSHoward Hinnanttemplate <class Elem, unsigned long Maxcode = 0x10ffff,
360c17e32eSHoward Hinnant          codecvt_mode Mode = (codecvt_mode)0>
370c17e32eSHoward Hinnantclass codecvt_utf16
380c17e32eSHoward Hinnant    : public codecvt<Elem, char, mbstate_t>
390c17e32eSHoward Hinnant{
405320c2b5SMarshall Clow    explicit codecvt_utf16(size_t refs = 0);
415320c2b5SMarshall Clow    ~codecvt_utf16();
420c17e32eSHoward Hinnant};
430c17e32eSHoward Hinnant
440c17e32eSHoward Hinnanttemplate <class Elem, unsigned long Maxcode = 0x10ffff,
450c17e32eSHoward Hinnant          codecvt_mode Mode = (codecvt_mode)0>
460c17e32eSHoward Hinnantclass codecvt_utf8_utf16
470c17e32eSHoward Hinnant    : public codecvt<Elem, char, mbstate_t>
480c17e32eSHoward Hinnant{
495320c2b5SMarshall Clow    explicit codecvt_utf8_utf16(size_t refs = 0);
505320c2b5SMarshall Clow    ~codecvt_utf8_utf16();
510c17e32eSHoward Hinnant};
520c17e32eSHoward Hinnant
530c17e32eSHoward Hinnant}  // std
540c17e32eSHoward Hinnant
550c17e32eSHoward Hinnant*/
560c17e32eSHoward Hinnant
57385cc25aSLouis Dionne#include <__assert> // all public C++ headers provide the assertion handler
580c17e32eSHoward Hinnant#include <__config>
590c17e32eSHoward Hinnant#include <__locale>
60bd6e6846SMark de Wever#include <version>
610c17e32eSHoward Hinnant
62073458b1SHoward Hinnant#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
630c17e32eSHoward Hinnant#  pragma GCC system_header
64073458b1SHoward Hinnant#endif
650c17e32eSHoward Hinnant
660c17e32eSHoward Hinnant_LIBCPP_BEGIN_NAMESPACE_STD
670c17e32eSHoward Hinnant
683ee9a50aSNikolas Klauserenum _LIBCPP_DEPRECATED_IN_CXX17 codecvt_mode
690c17e32eSHoward Hinnant{
700c17e32eSHoward Hinnant    consume_header = 4,
710c17e32eSHoward Hinnant    generate_header = 2,
720c17e32eSHoward Hinnant    little_endian = 1
730c17e32eSHoward Hinnant};
740c17e32eSHoward Hinnant
750c17e32eSHoward Hinnant// codecvt_utf8
760c17e32eSHoward Hinnant
770c17e32eSHoward Hinnanttemplate <class _Elem> class __codecvt_utf8;
780c17e32eSHoward Hinnant
79f4c1258dSLouis Dionne#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS
800c17e32eSHoward Hinnanttemplate <>
81f0544c20SHoward Hinnantclass _LIBCPP_TYPE_VIS __codecvt_utf8<wchar_t>
820c17e32eSHoward Hinnant    : public codecvt<wchar_t, char, mbstate_t>
830c17e32eSHoward Hinnant{
840c17e32eSHoward Hinnant    unsigned long _Maxcode_;
853ee9a50aSNikolas Klauser_LIBCPP_SUPPRESS_DEPRECATED_PUSH
860c17e32eSHoward Hinnant    codecvt_mode _Mode_;
873ee9a50aSNikolas Klauser_LIBCPP_SUPPRESS_DEPRECATED_POP
880c17e32eSHoward Hinnantpublic:
890c17e32eSHoward Hinnant    typedef wchar_t   intern_type;
900c17e32eSHoward Hinnant    typedef char      extern_type;
910c17e32eSHoward Hinnant    typedef mbstate_t state_type;
920c17e32eSHoward Hinnant
933ee9a50aSNikolas Klauser_LIBCPP_SUPPRESS_DEPRECATED_PUSH
94dc7200b4SLouis Dionne    _LIBCPP_INLINE_VISIBILITY
95*b48c5010SNikolas Klauser    explicit __codecvt_utf8(size_t __refs, unsigned long __maxcode,
96*b48c5010SNikolas Klauser                            codecvt_mode __mode)
97*b48c5010SNikolas Klauser        : codecvt<wchar_t, char, mbstate_t>(__refs), _Maxcode_(__maxcode),
98*b48c5010SNikolas Klauser          _Mode_(__mode) {}
993ee9a50aSNikolas Klauser_LIBCPP_SUPPRESS_DEPRECATED_POP
1000c17e32eSHoward Hinnantprotected:
1010c17e32eSHoward Hinnant    virtual result
1020c17e32eSHoward Hinnant        do_out(state_type& __st,
1030c17e32eSHoward Hinnant               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
1040c17e32eSHoward Hinnant               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
1050c17e32eSHoward Hinnant    virtual result
1060c17e32eSHoward Hinnant        do_in(state_type& __st,
1070c17e32eSHoward Hinnant              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
1080c17e32eSHoward Hinnant              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
1090c17e32eSHoward Hinnant    virtual result
1100c17e32eSHoward Hinnant        do_unshift(state_type& __st,
1110c17e32eSHoward Hinnant                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
112585a3cc3SDimitry Andric    virtual int do_encoding() const _NOEXCEPT;
113585a3cc3SDimitry Andric    virtual bool do_always_noconv() const _NOEXCEPT;
1140c17e32eSHoward Hinnant    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
1150c17e32eSHoward Hinnant                          size_t __mx) const;
116585a3cc3SDimitry Andric    virtual int do_max_length() const _NOEXCEPT;
1170c17e32eSHoward Hinnant};
118f4c1258dSLouis Dionne#endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS
1190c17e32eSHoward Hinnant
120a984dcafSMarek Kurdej_LIBCPP_SUPPRESS_DEPRECATED_PUSH
1210c17e32eSHoward Hinnanttemplate <>
122f0544c20SHoward Hinnantclass _LIBCPP_TYPE_VIS __codecvt_utf8<char16_t>
1230c17e32eSHoward Hinnant    : public codecvt<char16_t, char, mbstate_t>
1240c17e32eSHoward Hinnant{
1250c17e32eSHoward Hinnant    unsigned long _Maxcode_;
1260c17e32eSHoward Hinnant    codecvt_mode _Mode_;
1270c17e32eSHoward Hinnantpublic:
1280c17e32eSHoward Hinnant    typedef char16_t  intern_type;
1290c17e32eSHoward Hinnant    typedef char      extern_type;
1300c17e32eSHoward Hinnant    typedef mbstate_t state_type;
1310c17e32eSHoward Hinnant
132dc7200b4SLouis Dionne    _LIBCPP_INLINE_VISIBILITY
133*b48c5010SNikolas Klauser    explicit __codecvt_utf8(size_t __refs, unsigned long __maxcode,
134*b48c5010SNikolas Klauser                            codecvt_mode __mode)
135*b48c5010SNikolas Klauser        : codecvt<char16_t, char, mbstate_t>(__refs), _Maxcode_(__maxcode),
136*b48c5010SNikolas Klauser          _Mode_(__mode) {}
137a984dcafSMarek Kurdej_LIBCPP_SUPPRESS_DEPRECATED_POP
138a984dcafSMarek Kurdej
1390c17e32eSHoward Hinnantprotected:
1400c17e32eSHoward Hinnant    virtual result
1410c17e32eSHoward Hinnant        do_out(state_type& __st,
1420c17e32eSHoward Hinnant               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
1430c17e32eSHoward Hinnant               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
1440c17e32eSHoward Hinnant    virtual result
1450c17e32eSHoward Hinnant        do_in(state_type& __st,
1460c17e32eSHoward Hinnant              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
1470c17e32eSHoward Hinnant              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
1480c17e32eSHoward Hinnant    virtual result
1490c17e32eSHoward Hinnant        do_unshift(state_type& __st,
1500c17e32eSHoward Hinnant                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
151585a3cc3SDimitry Andric    virtual int do_encoding() const _NOEXCEPT;
152585a3cc3SDimitry Andric    virtual bool do_always_noconv() const _NOEXCEPT;
1530c17e32eSHoward Hinnant    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
1540c17e32eSHoward Hinnant                          size_t __mx) const;
155585a3cc3SDimitry Andric    virtual int do_max_length() const _NOEXCEPT;
1560c17e32eSHoward Hinnant};
1570c17e32eSHoward Hinnant
158a984dcafSMarek Kurdej_LIBCPP_SUPPRESS_DEPRECATED_PUSH
1590c17e32eSHoward Hinnanttemplate <>
160f0544c20SHoward Hinnantclass _LIBCPP_TYPE_VIS __codecvt_utf8<char32_t>
1610c17e32eSHoward Hinnant    : public codecvt<char32_t, char, mbstate_t>
1620c17e32eSHoward Hinnant{
1630c17e32eSHoward Hinnant    unsigned long _Maxcode_;
1640c17e32eSHoward Hinnant    codecvt_mode _Mode_;
1650c17e32eSHoward Hinnantpublic:
1660c17e32eSHoward Hinnant    typedef char32_t  intern_type;
1670c17e32eSHoward Hinnant    typedef char      extern_type;
1680c17e32eSHoward Hinnant    typedef mbstate_t state_type;
1690c17e32eSHoward Hinnant
170dc7200b4SLouis Dionne    _LIBCPP_INLINE_VISIBILITY
171*b48c5010SNikolas Klauser    explicit __codecvt_utf8(size_t __refs, unsigned long __maxcode,
172*b48c5010SNikolas Klauser                            codecvt_mode __mode)
173*b48c5010SNikolas Klauser        : codecvt<char32_t, char, mbstate_t>(__refs), _Maxcode_(__maxcode),
174*b48c5010SNikolas Klauser          _Mode_(__mode) {}
175a984dcafSMarek Kurdej_LIBCPP_SUPPRESS_DEPRECATED_POP
176a984dcafSMarek Kurdej
1770c17e32eSHoward Hinnantprotected:
1780c17e32eSHoward Hinnant    virtual result
1790c17e32eSHoward Hinnant        do_out(state_type& __st,
1800c17e32eSHoward Hinnant               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
1810c17e32eSHoward Hinnant               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
1820c17e32eSHoward Hinnant    virtual result
1830c17e32eSHoward Hinnant        do_in(state_type& __st,
1840c17e32eSHoward Hinnant              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
1850c17e32eSHoward Hinnant              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
1860c17e32eSHoward Hinnant    virtual result
1870c17e32eSHoward Hinnant        do_unshift(state_type& __st,
1880c17e32eSHoward Hinnant                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
189585a3cc3SDimitry Andric    virtual int do_encoding() const _NOEXCEPT;
190585a3cc3SDimitry Andric    virtual bool do_always_noconv() const _NOEXCEPT;
1910c17e32eSHoward Hinnant    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
1920c17e32eSHoward Hinnant                          size_t __mx) const;
193585a3cc3SDimitry Andric    virtual int do_max_length() const _NOEXCEPT;
1940c17e32eSHoward Hinnant};
1950c17e32eSHoward Hinnant
1963ee9a50aSNikolas Klauser_LIBCPP_SUPPRESS_DEPRECATED_PUSH
1970c17e32eSHoward Hinnanttemplate <class _Elem, unsigned long _Maxcode = 0x10ffff,
1980c17e32eSHoward Hinnant          codecvt_mode _Mode = (codecvt_mode)0>
1993ee9a50aSNikolas Klauserclass _LIBCPP_TEMPLATE_VIS _LIBCPP_DEPRECATED_IN_CXX17 codecvt_utf8
2000c17e32eSHoward Hinnant    : public __codecvt_utf8<_Elem>
2010c17e32eSHoward Hinnant{
2020c17e32eSHoward Hinnantpublic:
203dc7200b4SLouis Dionne    _LIBCPP_INLINE_VISIBILITY
2040c17e32eSHoward Hinnant    explicit codecvt_utf8(size_t __refs = 0)
2050c17e32eSHoward Hinnant        : __codecvt_utf8<_Elem>(__refs, _Maxcode, _Mode) {}
2060c17e32eSHoward Hinnant
207dc7200b4SLouis Dionne    _LIBCPP_INLINE_VISIBILITY
2080c17e32eSHoward Hinnant    ~codecvt_utf8() {}
2090c17e32eSHoward Hinnant};
2103ee9a50aSNikolas Klauser_LIBCPP_SUPPRESS_DEPRECATED_POP
2110c17e32eSHoward Hinnant
2120c17e32eSHoward Hinnant// codecvt_utf16
2130c17e32eSHoward Hinnant
2140c17e32eSHoward Hinnanttemplate <class _Elem, bool _LittleEndian> class __codecvt_utf16;
2150c17e32eSHoward Hinnant
216f4c1258dSLouis Dionne#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS
2170c17e32eSHoward Hinnanttemplate <>
218f0544c20SHoward Hinnantclass _LIBCPP_TYPE_VIS __codecvt_utf16<wchar_t, false>
2190c17e32eSHoward Hinnant    : public codecvt<wchar_t, char, mbstate_t>
2200c17e32eSHoward Hinnant{
2210c17e32eSHoward Hinnant    unsigned long _Maxcode_;
2223ee9a50aSNikolas Klauser_LIBCPP_SUPPRESS_DEPRECATED_PUSH
2230c17e32eSHoward Hinnant    codecvt_mode _Mode_;
2243ee9a50aSNikolas Klauser_LIBCPP_SUPPRESS_DEPRECATED_POP
2250c17e32eSHoward Hinnantpublic:
2260c17e32eSHoward Hinnant    typedef wchar_t   intern_type;
2270c17e32eSHoward Hinnant    typedef char      extern_type;
2280c17e32eSHoward Hinnant    typedef mbstate_t state_type;
2290c17e32eSHoward Hinnant
2303ee9a50aSNikolas Klauser_LIBCPP_SUPPRESS_DEPRECATED_PUSH
231dc7200b4SLouis Dionne    _LIBCPP_INLINE_VISIBILITY
232*b48c5010SNikolas Klauser    explicit __codecvt_utf16(size_t __refs, unsigned long __maxcode,
233*b48c5010SNikolas Klauser                            codecvt_mode __mode)
234*b48c5010SNikolas Klauser        : codecvt<wchar_t, char, mbstate_t>(__refs), _Maxcode_(__maxcode),
235*b48c5010SNikolas Klauser          _Mode_(__mode) {}
2363ee9a50aSNikolas Klauser_LIBCPP_SUPPRESS_DEPRECATED_POP
2370c17e32eSHoward Hinnantprotected:
2380c17e32eSHoward Hinnant    virtual result
2390c17e32eSHoward Hinnant        do_out(state_type& __st,
2400c17e32eSHoward Hinnant               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
2410c17e32eSHoward Hinnant               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
2420c17e32eSHoward Hinnant    virtual result
2430c17e32eSHoward Hinnant        do_in(state_type& __st,
2440c17e32eSHoward Hinnant              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
2450c17e32eSHoward Hinnant              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
2460c17e32eSHoward Hinnant    virtual result
2470c17e32eSHoward Hinnant        do_unshift(state_type& __st,
2480c17e32eSHoward Hinnant                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
249585a3cc3SDimitry Andric    virtual int do_encoding() const _NOEXCEPT;
250585a3cc3SDimitry Andric    virtual bool do_always_noconv() const _NOEXCEPT;
2510c17e32eSHoward Hinnant    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
2520c17e32eSHoward Hinnant                          size_t __mx) const;
253585a3cc3SDimitry Andric    virtual int do_max_length() const _NOEXCEPT;
2540c17e32eSHoward Hinnant};
2550c17e32eSHoward Hinnant
2560c17e32eSHoward Hinnanttemplate <>
257f0544c20SHoward Hinnantclass _LIBCPP_TYPE_VIS __codecvt_utf16<wchar_t, true>
2580c17e32eSHoward Hinnant    : public codecvt<wchar_t, char, mbstate_t>
2590c17e32eSHoward Hinnant{
2600c17e32eSHoward Hinnant    unsigned long _Maxcode_;
2613ee9a50aSNikolas Klauser_LIBCPP_SUPPRESS_DEPRECATED_PUSH
2620c17e32eSHoward Hinnant    codecvt_mode _Mode_;
2633ee9a50aSNikolas Klauser_LIBCPP_SUPPRESS_DEPRECATED_POP
2640c17e32eSHoward Hinnantpublic:
2650c17e32eSHoward Hinnant    typedef wchar_t   intern_type;
2660c17e32eSHoward Hinnant    typedef char      extern_type;
2670c17e32eSHoward Hinnant    typedef mbstate_t state_type;
2680c17e32eSHoward Hinnant
2693ee9a50aSNikolas Klauser_LIBCPP_SUPPRESS_DEPRECATED_PUSH
270dc7200b4SLouis Dionne    _LIBCPP_INLINE_VISIBILITY
271*b48c5010SNikolas Klauser    explicit __codecvt_utf16(size_t __refs, unsigned long __maxcode,
272*b48c5010SNikolas Klauser                            codecvt_mode __mode)
273*b48c5010SNikolas Klauser        : codecvt<wchar_t, char, mbstate_t>(__refs), _Maxcode_(__maxcode),
274*b48c5010SNikolas Klauser          _Mode_(__mode) {}
2753ee9a50aSNikolas Klauser_LIBCPP_SUPPRESS_DEPRECATED_POP
2760c17e32eSHoward Hinnantprotected:
2770c17e32eSHoward Hinnant    virtual result
2780c17e32eSHoward Hinnant        do_out(state_type& __st,
2790c17e32eSHoward Hinnant               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
2800c17e32eSHoward Hinnant               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
2810c17e32eSHoward Hinnant    virtual result
2820c17e32eSHoward Hinnant        do_in(state_type& __st,
2830c17e32eSHoward Hinnant              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
2840c17e32eSHoward Hinnant              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
2850c17e32eSHoward Hinnant    virtual result
2860c17e32eSHoward Hinnant        do_unshift(state_type& __st,
2870c17e32eSHoward Hinnant                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
288585a3cc3SDimitry Andric    virtual int do_encoding() const _NOEXCEPT;
289585a3cc3SDimitry Andric    virtual bool do_always_noconv() const _NOEXCEPT;
2900c17e32eSHoward Hinnant    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
2910c17e32eSHoward Hinnant                          size_t __mx) const;
292585a3cc3SDimitry Andric    virtual int do_max_length() const _NOEXCEPT;
2930c17e32eSHoward Hinnant};
294f4c1258dSLouis Dionne#endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS
2950c17e32eSHoward Hinnant
296a984dcafSMarek Kurdej_LIBCPP_SUPPRESS_DEPRECATED_PUSH
2970c17e32eSHoward Hinnanttemplate <>
298f0544c20SHoward Hinnantclass _LIBCPP_TYPE_VIS __codecvt_utf16<char16_t, false>
2990c17e32eSHoward Hinnant    : public codecvt<char16_t, char, mbstate_t>
3000c17e32eSHoward Hinnant{
3010c17e32eSHoward Hinnant    unsigned long _Maxcode_;
3020c17e32eSHoward Hinnant    codecvt_mode _Mode_;
3030c17e32eSHoward Hinnantpublic:
3040c17e32eSHoward Hinnant    typedef char16_t  intern_type;
3050c17e32eSHoward Hinnant    typedef char      extern_type;
3060c17e32eSHoward Hinnant    typedef mbstate_t state_type;
3070c17e32eSHoward Hinnant
308dc7200b4SLouis Dionne    _LIBCPP_INLINE_VISIBILITY
309*b48c5010SNikolas Klauser    explicit __codecvt_utf16(size_t __refs, unsigned long __maxcode,
310*b48c5010SNikolas Klauser                            codecvt_mode __mode)
311*b48c5010SNikolas Klauser        : codecvt<char16_t, char, mbstate_t>(__refs), _Maxcode_(__maxcode),
312*b48c5010SNikolas Klauser          _Mode_(__mode) {}
313a984dcafSMarek Kurdej_LIBCPP_SUPPRESS_DEPRECATED_POP
314a984dcafSMarek Kurdej
3150c17e32eSHoward Hinnantprotected:
3160c17e32eSHoward Hinnant    virtual result
3170c17e32eSHoward Hinnant        do_out(state_type& __st,
3180c17e32eSHoward Hinnant               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
3190c17e32eSHoward Hinnant               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
3200c17e32eSHoward Hinnant    virtual result
3210c17e32eSHoward Hinnant        do_in(state_type& __st,
3220c17e32eSHoward Hinnant              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
3230c17e32eSHoward Hinnant              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
3240c17e32eSHoward Hinnant    virtual result
3250c17e32eSHoward Hinnant        do_unshift(state_type& __st,
3260c17e32eSHoward Hinnant                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
327585a3cc3SDimitry Andric    virtual int do_encoding() const _NOEXCEPT;
328585a3cc3SDimitry Andric    virtual bool do_always_noconv() const _NOEXCEPT;
3290c17e32eSHoward Hinnant    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
3300c17e32eSHoward Hinnant                          size_t __mx) const;
331585a3cc3SDimitry Andric    virtual int do_max_length() const _NOEXCEPT;
3320c17e32eSHoward Hinnant};
3330c17e32eSHoward Hinnant
334a984dcafSMarek Kurdej_LIBCPP_SUPPRESS_DEPRECATED_PUSH
3350c17e32eSHoward Hinnanttemplate <>
336f0544c20SHoward Hinnantclass _LIBCPP_TYPE_VIS __codecvt_utf16<char16_t, true>
3370c17e32eSHoward Hinnant    : public codecvt<char16_t, char, mbstate_t>
3380c17e32eSHoward Hinnant{
3390c17e32eSHoward Hinnant    unsigned long _Maxcode_;
3400c17e32eSHoward Hinnant    codecvt_mode _Mode_;
3410c17e32eSHoward Hinnantpublic:
3420c17e32eSHoward Hinnant    typedef char16_t  intern_type;
3430c17e32eSHoward Hinnant    typedef char      extern_type;
3440c17e32eSHoward Hinnant    typedef mbstate_t state_type;
3450c17e32eSHoward Hinnant
346dc7200b4SLouis Dionne    _LIBCPP_INLINE_VISIBILITY
347*b48c5010SNikolas Klauser    explicit __codecvt_utf16(size_t __refs, unsigned long __maxcode,
348*b48c5010SNikolas Klauser                            codecvt_mode __mode)
349*b48c5010SNikolas Klauser        : codecvt<char16_t, char, mbstate_t>(__refs), _Maxcode_(__maxcode),
350*b48c5010SNikolas Klauser          _Mode_(__mode) {}
351a984dcafSMarek Kurdej_LIBCPP_SUPPRESS_DEPRECATED_POP
352a984dcafSMarek Kurdej
3530c17e32eSHoward Hinnantprotected:
3540c17e32eSHoward Hinnant    virtual result
3550c17e32eSHoward Hinnant        do_out(state_type& __st,
3560c17e32eSHoward Hinnant               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
3570c17e32eSHoward Hinnant               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
3580c17e32eSHoward Hinnant    virtual result
3590c17e32eSHoward Hinnant        do_in(state_type& __st,
3600c17e32eSHoward Hinnant              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
3610c17e32eSHoward Hinnant              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
3620c17e32eSHoward Hinnant    virtual result
3630c17e32eSHoward Hinnant        do_unshift(state_type& __st,
3640c17e32eSHoward Hinnant                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
365585a3cc3SDimitry Andric    virtual int do_encoding() const _NOEXCEPT;
366585a3cc3SDimitry Andric    virtual bool do_always_noconv() const _NOEXCEPT;
3670c17e32eSHoward Hinnant    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
3680c17e32eSHoward Hinnant                          size_t __mx) const;
369585a3cc3SDimitry Andric    virtual int do_max_length() const _NOEXCEPT;
3700c17e32eSHoward Hinnant};
3710c17e32eSHoward Hinnant
372a984dcafSMarek Kurdej_LIBCPP_SUPPRESS_DEPRECATED_PUSH
3730c17e32eSHoward Hinnanttemplate <>
374f0544c20SHoward Hinnantclass _LIBCPP_TYPE_VIS __codecvt_utf16<char32_t, false>
3750c17e32eSHoward Hinnant    : public codecvt<char32_t, char, mbstate_t>
3760c17e32eSHoward Hinnant{
3770c17e32eSHoward Hinnant    unsigned long _Maxcode_;
3780c17e32eSHoward Hinnant    codecvt_mode _Mode_;
3790c17e32eSHoward Hinnantpublic:
3800c17e32eSHoward Hinnant    typedef char32_t  intern_type;
3810c17e32eSHoward Hinnant    typedef char      extern_type;
3820c17e32eSHoward Hinnant    typedef mbstate_t state_type;
3830c17e32eSHoward Hinnant
384dc7200b4SLouis Dionne    _LIBCPP_INLINE_VISIBILITY
385*b48c5010SNikolas Klauser    explicit __codecvt_utf16(size_t __refs, unsigned long __maxcode,
386*b48c5010SNikolas Klauser                            codecvt_mode __mode)
387*b48c5010SNikolas Klauser        : codecvt<char32_t, char, mbstate_t>(__refs), _Maxcode_(__maxcode),
388*b48c5010SNikolas Klauser          _Mode_(__mode) {}
389a984dcafSMarek Kurdej_LIBCPP_SUPPRESS_DEPRECATED_POP
390a984dcafSMarek Kurdej
3910c17e32eSHoward Hinnantprotected:
3920c17e32eSHoward Hinnant    virtual result
3930c17e32eSHoward Hinnant        do_out(state_type& __st,
3940c17e32eSHoward Hinnant               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
3950c17e32eSHoward Hinnant               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
3960c17e32eSHoward Hinnant    virtual result
3970c17e32eSHoward Hinnant        do_in(state_type& __st,
3980c17e32eSHoward Hinnant              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
3990c17e32eSHoward Hinnant              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
4000c17e32eSHoward Hinnant    virtual result
4010c17e32eSHoward Hinnant        do_unshift(state_type& __st,
4020c17e32eSHoward Hinnant                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
403585a3cc3SDimitry Andric    virtual int do_encoding() const _NOEXCEPT;
404585a3cc3SDimitry Andric    virtual bool do_always_noconv() const _NOEXCEPT;
4050c17e32eSHoward Hinnant    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
4060c17e32eSHoward Hinnant                          size_t __mx) const;
407585a3cc3SDimitry Andric    virtual int do_max_length() const _NOEXCEPT;
4080c17e32eSHoward Hinnant};
4090c17e32eSHoward Hinnant
410a984dcafSMarek Kurdej_LIBCPP_SUPPRESS_DEPRECATED_PUSH
4110c17e32eSHoward Hinnanttemplate <>
412f0544c20SHoward Hinnantclass _LIBCPP_TYPE_VIS __codecvt_utf16<char32_t, true>
4130c17e32eSHoward Hinnant    : public codecvt<char32_t, char, mbstate_t>
4140c17e32eSHoward Hinnant{
4150c17e32eSHoward Hinnant    unsigned long _Maxcode_;
4160c17e32eSHoward Hinnant    codecvt_mode _Mode_;
4170c17e32eSHoward Hinnantpublic:
4180c17e32eSHoward Hinnant    typedef char32_t  intern_type;
4190c17e32eSHoward Hinnant    typedef char      extern_type;
4200c17e32eSHoward Hinnant    typedef mbstate_t state_type;
4210c17e32eSHoward Hinnant
422dc7200b4SLouis Dionne    _LIBCPP_INLINE_VISIBILITY
423*b48c5010SNikolas Klauser    explicit __codecvt_utf16(size_t __refs, unsigned long __maxcode,
424*b48c5010SNikolas Klauser                            codecvt_mode __mode)
425*b48c5010SNikolas Klauser        : codecvt<char32_t, char, mbstate_t>(__refs), _Maxcode_(__maxcode),
426*b48c5010SNikolas Klauser          _Mode_(__mode) {}
427a984dcafSMarek Kurdej_LIBCPP_SUPPRESS_DEPRECATED_POP
428a984dcafSMarek Kurdej
4290c17e32eSHoward Hinnantprotected:
4300c17e32eSHoward Hinnant    virtual result
4310c17e32eSHoward Hinnant        do_out(state_type& __st,
4320c17e32eSHoward Hinnant               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
4330c17e32eSHoward Hinnant               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
4340c17e32eSHoward Hinnant    virtual result
4350c17e32eSHoward Hinnant        do_in(state_type& __st,
4360c17e32eSHoward Hinnant              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
4370c17e32eSHoward Hinnant              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
4380c17e32eSHoward Hinnant    virtual result
4390c17e32eSHoward Hinnant        do_unshift(state_type& __st,
4400c17e32eSHoward Hinnant                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
441585a3cc3SDimitry Andric    virtual int do_encoding() const _NOEXCEPT;
442585a3cc3SDimitry Andric    virtual bool do_always_noconv() const _NOEXCEPT;
4430c17e32eSHoward Hinnant    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
4440c17e32eSHoward Hinnant                          size_t __mx) const;
445585a3cc3SDimitry Andric    virtual int do_max_length() const _NOEXCEPT;
4460c17e32eSHoward Hinnant};
4470c17e32eSHoward Hinnant
4483ee9a50aSNikolas Klauser_LIBCPP_SUPPRESS_DEPRECATED_PUSH
4490c17e32eSHoward Hinnanttemplate <class _Elem, unsigned long _Maxcode = 0x10ffff,
4500c17e32eSHoward Hinnant          codecvt_mode _Mode = (codecvt_mode)0>
4513ee9a50aSNikolas Klauserclass _LIBCPP_TEMPLATE_VIS _LIBCPP_DEPRECATED_IN_CXX17 codecvt_utf16
4520c17e32eSHoward Hinnant    : public __codecvt_utf16<_Elem, _Mode & little_endian>
4530c17e32eSHoward Hinnant{
4540c17e32eSHoward Hinnantpublic:
455dc7200b4SLouis Dionne    _LIBCPP_INLINE_VISIBILITY
4560c17e32eSHoward Hinnant    explicit codecvt_utf16(size_t __refs = 0)
4570c17e32eSHoward Hinnant        : __codecvt_utf16<_Elem, _Mode & little_endian>(__refs, _Maxcode, _Mode) {}
4580c17e32eSHoward Hinnant
459dc7200b4SLouis Dionne    _LIBCPP_INLINE_VISIBILITY
4600c17e32eSHoward Hinnant    ~codecvt_utf16() {}
4610c17e32eSHoward Hinnant};
4623ee9a50aSNikolas Klauser_LIBCPP_SUPPRESS_DEPRECATED_POP
4630c17e32eSHoward Hinnant
4640c17e32eSHoward Hinnant// codecvt_utf8_utf16
4650c17e32eSHoward Hinnant
4660c17e32eSHoward Hinnanttemplate <class _Elem> class __codecvt_utf8_utf16;
4670c17e32eSHoward Hinnant
468f4c1258dSLouis Dionne#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS
4690c17e32eSHoward Hinnanttemplate <>
470f0544c20SHoward Hinnantclass _LIBCPP_TYPE_VIS __codecvt_utf8_utf16<wchar_t>
4710c17e32eSHoward Hinnant    : public codecvt<wchar_t, char, mbstate_t>
4720c17e32eSHoward Hinnant{
4730c17e32eSHoward Hinnant    unsigned long _Maxcode_;
4743ee9a50aSNikolas Klauser_LIBCPP_SUPPRESS_DEPRECATED_PUSH
4750c17e32eSHoward Hinnant    codecvt_mode _Mode_;
4763ee9a50aSNikolas Klauser_LIBCPP_SUPPRESS_DEPRECATED_POP
4770c17e32eSHoward Hinnantpublic:
4780c17e32eSHoward Hinnant    typedef wchar_t   intern_type;
4790c17e32eSHoward Hinnant    typedef char      extern_type;
4800c17e32eSHoward Hinnant    typedef mbstate_t state_type;
4810c17e32eSHoward Hinnant
4823ee9a50aSNikolas Klauser_LIBCPP_SUPPRESS_DEPRECATED_PUSH
483dc7200b4SLouis Dionne    _LIBCPP_INLINE_VISIBILITY
484*b48c5010SNikolas Klauser    explicit __codecvt_utf8_utf16(size_t __refs, unsigned long __maxcode,
485*b48c5010SNikolas Klauser                            codecvt_mode __mode)
486*b48c5010SNikolas Klauser        : codecvt<wchar_t, char, mbstate_t>(__refs), _Maxcode_(__maxcode),
487*b48c5010SNikolas Klauser          _Mode_(__mode) {}
4883ee9a50aSNikolas Klauser_LIBCPP_SUPPRESS_DEPRECATED_POP
4890c17e32eSHoward Hinnantprotected:
4900c17e32eSHoward Hinnant    virtual result
4910c17e32eSHoward Hinnant        do_out(state_type& __st,
4920c17e32eSHoward Hinnant               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
4930c17e32eSHoward Hinnant               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
4940c17e32eSHoward Hinnant    virtual result
4950c17e32eSHoward Hinnant        do_in(state_type& __st,
4960c17e32eSHoward Hinnant              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
4970c17e32eSHoward Hinnant              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
4980c17e32eSHoward Hinnant    virtual result
4990c17e32eSHoward Hinnant        do_unshift(state_type& __st,
5000c17e32eSHoward Hinnant                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
501585a3cc3SDimitry Andric    virtual int do_encoding() const _NOEXCEPT;
502585a3cc3SDimitry Andric    virtual bool do_always_noconv() const _NOEXCEPT;
5030c17e32eSHoward Hinnant    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
5040c17e32eSHoward Hinnant                          size_t __mx) const;
505585a3cc3SDimitry Andric    virtual int do_max_length() const _NOEXCEPT;
5060c17e32eSHoward Hinnant};
507f4c1258dSLouis Dionne#endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS
5080c17e32eSHoward Hinnant
509a984dcafSMarek Kurdej_LIBCPP_SUPPRESS_DEPRECATED_PUSH
5100c17e32eSHoward Hinnanttemplate <>
511f0544c20SHoward Hinnantclass _LIBCPP_TYPE_VIS __codecvt_utf8_utf16<char32_t>
5120c17e32eSHoward Hinnant    : public codecvt<char32_t, char, mbstate_t>
5130c17e32eSHoward Hinnant{
5140c17e32eSHoward Hinnant    unsigned long _Maxcode_;
5150c17e32eSHoward Hinnant    codecvt_mode _Mode_;
5160c17e32eSHoward Hinnantpublic:
5170c17e32eSHoward Hinnant    typedef char32_t  intern_type;
5180c17e32eSHoward Hinnant    typedef char      extern_type;
5190c17e32eSHoward Hinnant    typedef mbstate_t state_type;
5200c17e32eSHoward Hinnant
521dc7200b4SLouis Dionne    _LIBCPP_INLINE_VISIBILITY
522*b48c5010SNikolas Klauser    explicit __codecvt_utf8_utf16(size_t __refs, unsigned long __maxcode,
523*b48c5010SNikolas Klauser                            codecvt_mode __mode)
524*b48c5010SNikolas Klauser        : codecvt<char32_t, char, mbstate_t>(__refs), _Maxcode_(__maxcode),
525*b48c5010SNikolas Klauser          _Mode_(__mode) {}
526a984dcafSMarek Kurdej_LIBCPP_SUPPRESS_DEPRECATED_POP
527a984dcafSMarek Kurdej
5280c17e32eSHoward Hinnantprotected:
5290c17e32eSHoward Hinnant    virtual result
5300c17e32eSHoward Hinnant        do_out(state_type& __st,
5310c17e32eSHoward Hinnant               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
5320c17e32eSHoward Hinnant               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
5330c17e32eSHoward Hinnant    virtual result
5340c17e32eSHoward Hinnant        do_in(state_type& __st,
5350c17e32eSHoward Hinnant              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
5360c17e32eSHoward Hinnant              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
5370c17e32eSHoward Hinnant    virtual result
5380c17e32eSHoward Hinnant        do_unshift(state_type& __st,
5390c17e32eSHoward Hinnant                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
540585a3cc3SDimitry Andric    virtual int do_encoding() const _NOEXCEPT;
541585a3cc3SDimitry Andric    virtual bool do_always_noconv() const _NOEXCEPT;
5420c17e32eSHoward Hinnant    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
5430c17e32eSHoward Hinnant                          size_t __mx) const;
544585a3cc3SDimitry Andric    virtual int do_max_length() const _NOEXCEPT;
5450c17e32eSHoward Hinnant};
5460c17e32eSHoward Hinnant
547a984dcafSMarek Kurdej_LIBCPP_SUPPRESS_DEPRECATED_PUSH
5480c17e32eSHoward Hinnanttemplate <>
549f0544c20SHoward Hinnantclass _LIBCPP_TYPE_VIS __codecvt_utf8_utf16<char16_t>
5500c17e32eSHoward Hinnant    : public codecvt<char16_t, char, mbstate_t>
5510c17e32eSHoward Hinnant{
5520c17e32eSHoward Hinnant    unsigned long _Maxcode_;
5530c17e32eSHoward Hinnant    codecvt_mode _Mode_;
5540c17e32eSHoward Hinnantpublic:
5550c17e32eSHoward Hinnant    typedef char16_t  intern_type;
5560c17e32eSHoward Hinnant    typedef char      extern_type;
5570c17e32eSHoward Hinnant    typedef mbstate_t state_type;
5580c17e32eSHoward Hinnant
559dc7200b4SLouis Dionne    _LIBCPP_INLINE_VISIBILITY
560*b48c5010SNikolas Klauser    explicit __codecvt_utf8_utf16(size_t __refs, unsigned long __maxcode,
561*b48c5010SNikolas Klauser                            codecvt_mode __mode)
562*b48c5010SNikolas Klauser        : codecvt<char16_t, char, mbstate_t>(__refs), _Maxcode_(__maxcode),
563*b48c5010SNikolas Klauser          _Mode_(__mode) {}
564a984dcafSMarek Kurdej_LIBCPP_SUPPRESS_DEPRECATED_POP
565a984dcafSMarek Kurdej
5660c17e32eSHoward Hinnantprotected:
5670c17e32eSHoward Hinnant    virtual result
5680c17e32eSHoward Hinnant        do_out(state_type& __st,
5690c17e32eSHoward Hinnant               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
5700c17e32eSHoward Hinnant               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
5710c17e32eSHoward Hinnant    virtual result
5720c17e32eSHoward Hinnant        do_in(state_type& __st,
5730c17e32eSHoward Hinnant              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
5740c17e32eSHoward Hinnant              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
5750c17e32eSHoward Hinnant    virtual result
5760c17e32eSHoward Hinnant        do_unshift(state_type& __st,
5770c17e32eSHoward Hinnant                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
578585a3cc3SDimitry Andric    virtual int do_encoding() const _NOEXCEPT;
579585a3cc3SDimitry Andric    virtual bool do_always_noconv() const _NOEXCEPT;
5800c17e32eSHoward Hinnant    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
5810c17e32eSHoward Hinnant                          size_t __mx) const;
582585a3cc3SDimitry Andric    virtual int do_max_length() const _NOEXCEPT;
5830c17e32eSHoward Hinnant};
5840c17e32eSHoward Hinnant
5853ee9a50aSNikolas Klauser_LIBCPP_SUPPRESS_DEPRECATED_PUSH
5860c17e32eSHoward Hinnanttemplate <class _Elem, unsigned long _Maxcode = 0x10ffff,
5870c17e32eSHoward Hinnant          codecvt_mode _Mode = (codecvt_mode)0>
5883ee9a50aSNikolas Klauserclass _LIBCPP_TEMPLATE_VIS _LIBCPP_DEPRECATED_IN_CXX17 codecvt_utf8_utf16
5890c17e32eSHoward Hinnant    : public __codecvt_utf8_utf16<_Elem>
5900c17e32eSHoward Hinnant{
5910c17e32eSHoward Hinnantpublic:
592dc7200b4SLouis Dionne    _LIBCPP_INLINE_VISIBILITY
5930c17e32eSHoward Hinnant    explicit codecvt_utf8_utf16(size_t __refs = 0)
5940c17e32eSHoward Hinnant        : __codecvt_utf8_utf16<_Elem>(__refs, _Maxcode, _Mode) {}
5950c17e32eSHoward Hinnant
596dc7200b4SLouis Dionne    _LIBCPP_INLINE_VISIBILITY
5970c17e32eSHoward Hinnant    ~codecvt_utf8_utf16() {}
5980c17e32eSHoward Hinnant};
5993ee9a50aSNikolas Klauser_LIBCPP_SUPPRESS_DEPRECATED_POP
6000c17e32eSHoward Hinnant
6010c17e32eSHoward Hinnant_LIBCPP_END_NAMESPACE_STD
6020c17e32eSHoward Hinnant
6030c17e32eSHoward Hinnant#endif // _LIBCPP_CODECVT
604