xref: /freebsd-12.1/contrib/libc++/include/codecvt (revision 4ba319b5)
17a984708SDavid Chisnall// -*- C++ -*-
27a984708SDavid Chisnall//===-------------------------- codecvt -----------------------------------===//
37a984708SDavid Chisnall//
47a984708SDavid Chisnall//                     The LLVM Compiler Infrastructure
57a984708SDavid Chisnall//
67a984708SDavid Chisnall// This file is dual licensed under the MIT and the University of Illinois Open
77a984708SDavid Chisnall// Source Licenses. See LICENSE.TXT for details.
87a984708SDavid Chisnall//
97a984708SDavid Chisnall//===----------------------------------------------------------------------===//
107a984708SDavid Chisnall
117a984708SDavid Chisnall#ifndef _LIBCPP_CODECVT
127a984708SDavid Chisnall#define _LIBCPP_CODECVT
137a984708SDavid Chisnall
147a984708SDavid Chisnall/*
157a984708SDavid Chisnall    codecvt synopsis
167a984708SDavid Chisnall
177a984708SDavid Chisnallnamespace std
187a984708SDavid Chisnall{
197a984708SDavid Chisnall
207a984708SDavid Chisnallenum codecvt_mode
217a984708SDavid Chisnall{
227a984708SDavid Chisnall    consume_header = 4,
237a984708SDavid Chisnall    generate_header = 2,
247a984708SDavid Chisnall    little_endian = 1
257a984708SDavid Chisnall};
267a984708SDavid Chisnall
277a984708SDavid Chisnalltemplate <class Elem, unsigned long Maxcode = 0x10ffff,
287a984708SDavid Chisnall          codecvt_mode Mode = (codecvt_mode)0>
297a984708SDavid Chisnallclass codecvt_utf8
307a984708SDavid Chisnall    : public codecvt<Elem, char, mbstate_t>
317a984708SDavid Chisnall{
324f7ab58eSDimitry Andric    explicit codecvt_utf8(size_t refs = 0);
334f7ab58eSDimitry Andric    ~codecvt_utf8();
347a984708SDavid Chisnall};
357a984708SDavid Chisnall
367a984708SDavid Chisnalltemplate <class Elem, unsigned long Maxcode = 0x10ffff,
377a984708SDavid Chisnall          codecvt_mode Mode = (codecvt_mode)0>
387a984708SDavid Chisnallclass codecvt_utf16
397a984708SDavid Chisnall    : public codecvt<Elem, char, mbstate_t>
407a984708SDavid Chisnall{
414f7ab58eSDimitry Andric    explicit codecvt_utf16(size_t refs = 0);
424f7ab58eSDimitry Andric    ~codecvt_utf16();
437a984708SDavid Chisnall};
447a984708SDavid Chisnall
457a984708SDavid Chisnalltemplate <class Elem, unsigned long Maxcode = 0x10ffff,
467a984708SDavid Chisnall          codecvt_mode Mode = (codecvt_mode)0>
477a984708SDavid Chisnallclass codecvt_utf8_utf16
487a984708SDavid Chisnall    : public codecvt<Elem, char, mbstate_t>
497a984708SDavid Chisnall{
504f7ab58eSDimitry Andric    explicit codecvt_utf8_utf16(size_t refs = 0);
514f7ab58eSDimitry Andric    ~codecvt_utf8_utf16();
527a984708SDavid Chisnall};
537a984708SDavid Chisnall
547a984708SDavid Chisnall}  // std
557a984708SDavid Chisnall
567a984708SDavid Chisnall*/
577a984708SDavid Chisnall
587a984708SDavid Chisnall#include <__config>
597a984708SDavid Chisnall#include <__locale>
607a984708SDavid Chisnall
617a984708SDavid Chisnall#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
627a984708SDavid Chisnall#pragma GCC system_header
637a984708SDavid Chisnall#endif
647a984708SDavid Chisnall
657a984708SDavid Chisnall_LIBCPP_BEGIN_NAMESPACE_STD
667a984708SDavid Chisnall
677a984708SDavid Chisnallenum codecvt_mode
687a984708SDavid Chisnall{
697a984708SDavid Chisnall    consume_header = 4,
707a984708SDavid Chisnall    generate_header = 2,
717a984708SDavid Chisnall    little_endian = 1
727a984708SDavid Chisnall};
737a984708SDavid Chisnall
747a984708SDavid Chisnall// codecvt_utf8
757a984708SDavid Chisnall
767a984708SDavid Chisnalltemplate <class _Elem> class __codecvt_utf8;
777a984708SDavid Chisnall
787a984708SDavid Chisnalltemplate <>
794f7ab58eSDimitry Andricclass _LIBCPP_TYPE_VIS __codecvt_utf8<wchar_t>
807a984708SDavid Chisnall    : public codecvt<wchar_t, char, mbstate_t>
817a984708SDavid Chisnall{
827a984708SDavid Chisnall    unsigned long _Maxcode_;
837a984708SDavid Chisnall    codecvt_mode _Mode_;
847a984708SDavid Chisnallpublic:
857a984708SDavid Chisnall    typedef wchar_t   intern_type;
867a984708SDavid Chisnall    typedef char      extern_type;
877a984708SDavid Chisnall    typedef mbstate_t state_type;
887a984708SDavid Chisnall
89*4ba319b5SDimitry Andric    _LIBCPP_INLINE_VISIBILITY
907a984708SDavid Chisnall    explicit __codecvt_utf8(size_t __refs, unsigned long _Maxcode,
917a984708SDavid Chisnall                            codecvt_mode _Mode)
927a984708SDavid Chisnall        : codecvt<wchar_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
937a984708SDavid Chisnall          _Mode_(_Mode) {}
947a984708SDavid Chisnallprotected:
957a984708SDavid Chisnall    virtual result
967a984708SDavid Chisnall        do_out(state_type& __st,
977a984708SDavid Chisnall               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
987a984708SDavid Chisnall               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
997a984708SDavid Chisnall    virtual result
1007a984708SDavid Chisnall        do_in(state_type& __st,
1017a984708SDavid Chisnall              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
1027a984708SDavid Chisnall              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
1037a984708SDavid Chisnall    virtual result
1047a984708SDavid Chisnall        do_unshift(state_type& __st,
1057a984708SDavid Chisnall                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
1067a984708SDavid Chisnall    virtual int do_encoding() const throw();
1077a984708SDavid Chisnall    virtual bool do_always_noconv() const throw();
1087a984708SDavid Chisnall    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
1097a984708SDavid Chisnall                          size_t __mx) const;
1107a984708SDavid Chisnall    virtual int do_max_length() const throw();
1117a984708SDavid Chisnall};
1127a984708SDavid Chisnall
1137a984708SDavid Chisnalltemplate <>
1144f7ab58eSDimitry Andricclass _LIBCPP_TYPE_VIS __codecvt_utf8<char16_t>
1157a984708SDavid Chisnall    : public codecvt<char16_t, char, mbstate_t>
1167a984708SDavid Chisnall{
1177a984708SDavid Chisnall    unsigned long _Maxcode_;
1187a984708SDavid Chisnall    codecvt_mode _Mode_;
1197a984708SDavid Chisnallpublic:
1207a984708SDavid Chisnall    typedef char16_t  intern_type;
1217a984708SDavid Chisnall    typedef char      extern_type;
1227a984708SDavid Chisnall    typedef mbstate_t state_type;
1237a984708SDavid Chisnall
124*4ba319b5SDimitry Andric    _LIBCPP_INLINE_VISIBILITY
1257a984708SDavid Chisnall    explicit __codecvt_utf8(size_t __refs, unsigned long _Maxcode,
1267a984708SDavid Chisnall                            codecvt_mode _Mode)
1277a984708SDavid Chisnall        : codecvt<char16_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
1287a984708SDavid Chisnall          _Mode_(_Mode) {}
1297a984708SDavid Chisnallprotected:
1307a984708SDavid Chisnall    virtual result
1317a984708SDavid Chisnall        do_out(state_type& __st,
1327a984708SDavid Chisnall               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
1337a984708SDavid Chisnall               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
1347a984708SDavid Chisnall    virtual result
1357a984708SDavid Chisnall        do_in(state_type& __st,
1367a984708SDavid Chisnall              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
1377a984708SDavid Chisnall              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
1387a984708SDavid Chisnall    virtual result
1397a984708SDavid Chisnall        do_unshift(state_type& __st,
1407a984708SDavid Chisnall                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
1417a984708SDavid Chisnall    virtual int do_encoding() const throw();
1427a984708SDavid Chisnall    virtual bool do_always_noconv() const throw();
1437a984708SDavid Chisnall    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
1447a984708SDavid Chisnall                          size_t __mx) const;
1457a984708SDavid Chisnall    virtual int do_max_length() const throw();
1467a984708SDavid Chisnall};
1477a984708SDavid Chisnall
1487a984708SDavid Chisnalltemplate <>
1494f7ab58eSDimitry Andricclass _LIBCPP_TYPE_VIS __codecvt_utf8<char32_t>
1507a984708SDavid Chisnall    : public codecvt<char32_t, char, mbstate_t>
1517a984708SDavid Chisnall{
1527a984708SDavid Chisnall    unsigned long _Maxcode_;
1537a984708SDavid Chisnall    codecvt_mode _Mode_;
1547a984708SDavid Chisnallpublic:
1557a984708SDavid Chisnall    typedef char32_t  intern_type;
1567a984708SDavid Chisnall    typedef char      extern_type;
1577a984708SDavid Chisnall    typedef mbstate_t state_type;
1587a984708SDavid Chisnall
159*4ba319b5SDimitry Andric    _LIBCPP_INLINE_VISIBILITY
1607a984708SDavid Chisnall    explicit __codecvt_utf8(size_t __refs, unsigned long _Maxcode,
1617a984708SDavid Chisnall                            codecvt_mode _Mode)
1627a984708SDavid Chisnall        : codecvt<char32_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
1637a984708SDavid Chisnall          _Mode_(_Mode) {}
1647a984708SDavid Chisnallprotected:
1657a984708SDavid Chisnall    virtual result
1667a984708SDavid Chisnall        do_out(state_type& __st,
1677a984708SDavid Chisnall               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
1687a984708SDavid Chisnall               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
1697a984708SDavid Chisnall    virtual result
1707a984708SDavid Chisnall        do_in(state_type& __st,
1717a984708SDavid Chisnall              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
1727a984708SDavid Chisnall              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
1737a984708SDavid Chisnall    virtual result
1747a984708SDavid Chisnall        do_unshift(state_type& __st,
1757a984708SDavid Chisnall                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
1767a984708SDavid Chisnall    virtual int do_encoding() const throw();
1777a984708SDavid Chisnall    virtual bool do_always_noconv() const throw();
1787a984708SDavid Chisnall    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
1797a984708SDavid Chisnall                          size_t __mx) const;
1807a984708SDavid Chisnall    virtual int do_max_length() const throw();
1817a984708SDavid Chisnall};
1827a984708SDavid Chisnall
1837a984708SDavid Chisnalltemplate <class _Elem, unsigned long _Maxcode = 0x10ffff,
1847a984708SDavid Chisnall          codecvt_mode _Mode = (codecvt_mode)0>
185aed8d94eSDimitry Andricclass _LIBCPP_TEMPLATE_VIS codecvt_utf8
1867a984708SDavid Chisnall    : public __codecvt_utf8<_Elem>
1877a984708SDavid Chisnall{
1887a984708SDavid Chisnallpublic:
189*4ba319b5SDimitry Andric    _LIBCPP_INLINE_VISIBILITY
1907a984708SDavid Chisnall    explicit codecvt_utf8(size_t __refs = 0)
1917a984708SDavid Chisnall        : __codecvt_utf8<_Elem>(__refs, _Maxcode, _Mode) {}
1927a984708SDavid Chisnall
193*4ba319b5SDimitry Andric    _LIBCPP_INLINE_VISIBILITY
1947a984708SDavid Chisnall    ~codecvt_utf8() {}
1957a984708SDavid Chisnall};
1967a984708SDavid Chisnall
1977a984708SDavid Chisnall// codecvt_utf16
1987a984708SDavid Chisnall
1997a984708SDavid Chisnalltemplate <class _Elem, bool _LittleEndian> class __codecvt_utf16;
2007a984708SDavid Chisnall
2017a984708SDavid Chisnalltemplate <>
2024f7ab58eSDimitry Andricclass _LIBCPP_TYPE_VIS __codecvt_utf16<wchar_t, false>
2037a984708SDavid Chisnall    : public codecvt<wchar_t, char, mbstate_t>
2047a984708SDavid Chisnall{
2057a984708SDavid Chisnall    unsigned long _Maxcode_;
2067a984708SDavid Chisnall    codecvt_mode _Mode_;
2077a984708SDavid Chisnallpublic:
2087a984708SDavid Chisnall    typedef wchar_t   intern_type;
2097a984708SDavid Chisnall    typedef char      extern_type;
2107a984708SDavid Chisnall    typedef mbstate_t state_type;
2117a984708SDavid Chisnall
212*4ba319b5SDimitry Andric    _LIBCPP_INLINE_VISIBILITY
2137a984708SDavid Chisnall    explicit __codecvt_utf16(size_t __refs, unsigned long _Maxcode,
2147a984708SDavid Chisnall                            codecvt_mode _Mode)
2157a984708SDavid Chisnall        : codecvt<wchar_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
2167a984708SDavid Chisnall          _Mode_(_Mode) {}
2177a984708SDavid Chisnallprotected:
2187a984708SDavid Chisnall    virtual result
2197a984708SDavid Chisnall        do_out(state_type& __st,
2207a984708SDavid Chisnall               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
2217a984708SDavid Chisnall               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
2227a984708SDavid Chisnall    virtual result
2237a984708SDavid Chisnall        do_in(state_type& __st,
2247a984708SDavid Chisnall              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
2257a984708SDavid Chisnall              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
2267a984708SDavid Chisnall    virtual result
2277a984708SDavid Chisnall        do_unshift(state_type& __st,
2287a984708SDavid Chisnall                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
2297a984708SDavid Chisnall    virtual int do_encoding() const throw();
2307a984708SDavid Chisnall    virtual bool do_always_noconv() const throw();
2317a984708SDavid Chisnall    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
2327a984708SDavid Chisnall                          size_t __mx) const;
2337a984708SDavid Chisnall    virtual int do_max_length() const throw();
2347a984708SDavid Chisnall};
2357a984708SDavid Chisnall
2367a984708SDavid Chisnalltemplate <>
2374f7ab58eSDimitry Andricclass _LIBCPP_TYPE_VIS __codecvt_utf16<wchar_t, true>
2387a984708SDavid Chisnall    : public codecvt<wchar_t, char, mbstate_t>
2397a984708SDavid Chisnall{
2407a984708SDavid Chisnall    unsigned long _Maxcode_;
2417a984708SDavid Chisnall    codecvt_mode _Mode_;
2427a984708SDavid Chisnallpublic:
2437a984708SDavid Chisnall    typedef wchar_t   intern_type;
2447a984708SDavid Chisnall    typedef char      extern_type;
2457a984708SDavid Chisnall    typedef mbstate_t state_type;
2467a984708SDavid Chisnall
247*4ba319b5SDimitry Andric    _LIBCPP_INLINE_VISIBILITY
2487a984708SDavid Chisnall    explicit __codecvt_utf16(size_t __refs, unsigned long _Maxcode,
2497a984708SDavid Chisnall                            codecvt_mode _Mode)
2507a984708SDavid Chisnall        : codecvt<wchar_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
2517a984708SDavid Chisnall          _Mode_(_Mode) {}
2527a984708SDavid Chisnallprotected:
2537a984708SDavid Chisnall    virtual result
2547a984708SDavid Chisnall        do_out(state_type& __st,
2557a984708SDavid Chisnall               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
2567a984708SDavid Chisnall               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
2577a984708SDavid Chisnall    virtual result
2587a984708SDavid Chisnall        do_in(state_type& __st,
2597a984708SDavid Chisnall              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
2607a984708SDavid Chisnall              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
2617a984708SDavid Chisnall    virtual result
2627a984708SDavid Chisnall        do_unshift(state_type& __st,
2637a984708SDavid Chisnall                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
2647a984708SDavid Chisnall    virtual int do_encoding() const throw();
2657a984708SDavid Chisnall    virtual bool do_always_noconv() const throw();
2667a984708SDavid Chisnall    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
2677a984708SDavid Chisnall                          size_t __mx) const;
2687a984708SDavid Chisnall    virtual int do_max_length() const throw();
2697a984708SDavid Chisnall};
2707a984708SDavid Chisnall
2717a984708SDavid Chisnalltemplate <>
2724f7ab58eSDimitry Andricclass _LIBCPP_TYPE_VIS __codecvt_utf16<char16_t, false>
2737a984708SDavid Chisnall    : public codecvt<char16_t, char, mbstate_t>
2747a984708SDavid Chisnall{
2757a984708SDavid Chisnall    unsigned long _Maxcode_;
2767a984708SDavid Chisnall    codecvt_mode _Mode_;
2777a984708SDavid Chisnallpublic:
2787a984708SDavid Chisnall    typedef char16_t  intern_type;
2797a984708SDavid Chisnall    typedef char      extern_type;
2807a984708SDavid Chisnall    typedef mbstate_t state_type;
2817a984708SDavid Chisnall
282*4ba319b5SDimitry Andric    _LIBCPP_INLINE_VISIBILITY
2837a984708SDavid Chisnall    explicit __codecvt_utf16(size_t __refs, unsigned long _Maxcode,
2847a984708SDavid Chisnall                            codecvt_mode _Mode)
2857a984708SDavid Chisnall        : codecvt<char16_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
2867a984708SDavid Chisnall          _Mode_(_Mode) {}
2877a984708SDavid Chisnallprotected:
2887a984708SDavid Chisnall    virtual result
2897a984708SDavid Chisnall        do_out(state_type& __st,
2907a984708SDavid Chisnall               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
2917a984708SDavid Chisnall               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
2927a984708SDavid Chisnall    virtual result
2937a984708SDavid Chisnall        do_in(state_type& __st,
2947a984708SDavid Chisnall              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
2957a984708SDavid Chisnall              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
2967a984708SDavid Chisnall    virtual result
2977a984708SDavid Chisnall        do_unshift(state_type& __st,
2987a984708SDavid Chisnall                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
2997a984708SDavid Chisnall    virtual int do_encoding() const throw();
3007a984708SDavid Chisnall    virtual bool do_always_noconv() const throw();
3017a984708SDavid Chisnall    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
3027a984708SDavid Chisnall                          size_t __mx) const;
3037a984708SDavid Chisnall    virtual int do_max_length() const throw();
3047a984708SDavid Chisnall};
3057a984708SDavid Chisnall
3067a984708SDavid Chisnalltemplate <>
3074f7ab58eSDimitry Andricclass _LIBCPP_TYPE_VIS __codecvt_utf16<char16_t, true>
3087a984708SDavid Chisnall    : public codecvt<char16_t, char, mbstate_t>
3097a984708SDavid Chisnall{
3107a984708SDavid Chisnall    unsigned long _Maxcode_;
3117a984708SDavid Chisnall    codecvt_mode _Mode_;
3127a984708SDavid Chisnallpublic:
3137a984708SDavid Chisnall    typedef char16_t  intern_type;
3147a984708SDavid Chisnall    typedef char      extern_type;
3157a984708SDavid Chisnall    typedef mbstate_t state_type;
3167a984708SDavid Chisnall
317*4ba319b5SDimitry Andric    _LIBCPP_INLINE_VISIBILITY
3187a984708SDavid Chisnall    explicit __codecvt_utf16(size_t __refs, unsigned long _Maxcode,
3197a984708SDavid Chisnall                            codecvt_mode _Mode)
3207a984708SDavid Chisnall        : codecvt<char16_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
3217a984708SDavid Chisnall          _Mode_(_Mode) {}
3227a984708SDavid Chisnallprotected:
3237a984708SDavid Chisnall    virtual result
3247a984708SDavid Chisnall        do_out(state_type& __st,
3257a984708SDavid Chisnall               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
3267a984708SDavid Chisnall               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
3277a984708SDavid Chisnall    virtual result
3287a984708SDavid Chisnall        do_in(state_type& __st,
3297a984708SDavid Chisnall              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
3307a984708SDavid Chisnall              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
3317a984708SDavid Chisnall    virtual result
3327a984708SDavid Chisnall        do_unshift(state_type& __st,
3337a984708SDavid Chisnall                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
3347a984708SDavid Chisnall    virtual int do_encoding() const throw();
3357a984708SDavid Chisnall    virtual bool do_always_noconv() const throw();
3367a984708SDavid Chisnall    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
3377a984708SDavid Chisnall                          size_t __mx) const;
3387a984708SDavid Chisnall    virtual int do_max_length() const throw();
3397a984708SDavid Chisnall};
3407a984708SDavid Chisnall
3417a984708SDavid Chisnalltemplate <>
3424f7ab58eSDimitry Andricclass _LIBCPP_TYPE_VIS __codecvt_utf16<char32_t, false>
3437a984708SDavid Chisnall    : public codecvt<char32_t, char, mbstate_t>
3447a984708SDavid Chisnall{
3457a984708SDavid Chisnall    unsigned long _Maxcode_;
3467a984708SDavid Chisnall    codecvt_mode _Mode_;
3477a984708SDavid Chisnallpublic:
3487a984708SDavid Chisnall    typedef char32_t  intern_type;
3497a984708SDavid Chisnall    typedef char      extern_type;
3507a984708SDavid Chisnall    typedef mbstate_t state_type;
3517a984708SDavid Chisnall
352*4ba319b5SDimitry Andric    _LIBCPP_INLINE_VISIBILITY
3537a984708SDavid Chisnall    explicit __codecvt_utf16(size_t __refs, unsigned long _Maxcode,
3547a984708SDavid Chisnall                            codecvt_mode _Mode)
3557a984708SDavid Chisnall        : codecvt<char32_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
3567a984708SDavid Chisnall          _Mode_(_Mode) {}
3577a984708SDavid Chisnallprotected:
3587a984708SDavid Chisnall    virtual result
3597a984708SDavid Chisnall        do_out(state_type& __st,
3607a984708SDavid Chisnall               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
3617a984708SDavid Chisnall               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
3627a984708SDavid Chisnall    virtual result
3637a984708SDavid Chisnall        do_in(state_type& __st,
3647a984708SDavid Chisnall              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
3657a984708SDavid Chisnall              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
3667a984708SDavid Chisnall    virtual result
3677a984708SDavid Chisnall        do_unshift(state_type& __st,
3687a984708SDavid Chisnall                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
3697a984708SDavid Chisnall    virtual int do_encoding() const throw();
3707a984708SDavid Chisnall    virtual bool do_always_noconv() const throw();
3717a984708SDavid Chisnall    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
3727a984708SDavid Chisnall                          size_t __mx) const;
3737a984708SDavid Chisnall    virtual int do_max_length() const throw();
3747a984708SDavid Chisnall};
3757a984708SDavid Chisnall
3767a984708SDavid Chisnalltemplate <>
3774f7ab58eSDimitry Andricclass _LIBCPP_TYPE_VIS __codecvt_utf16<char32_t, true>
3787a984708SDavid Chisnall    : public codecvt<char32_t, char, mbstate_t>
3797a984708SDavid Chisnall{
3807a984708SDavid Chisnall    unsigned long _Maxcode_;
3817a984708SDavid Chisnall    codecvt_mode _Mode_;
3827a984708SDavid Chisnallpublic:
3837a984708SDavid Chisnall    typedef char32_t  intern_type;
3847a984708SDavid Chisnall    typedef char      extern_type;
3857a984708SDavid Chisnall    typedef mbstate_t state_type;
3867a984708SDavid Chisnall
387*4ba319b5SDimitry Andric    _LIBCPP_INLINE_VISIBILITY
3887a984708SDavid Chisnall    explicit __codecvt_utf16(size_t __refs, unsigned long _Maxcode,
3897a984708SDavid Chisnall                            codecvt_mode _Mode)
3907a984708SDavid Chisnall        : codecvt<char32_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
3917a984708SDavid Chisnall          _Mode_(_Mode) {}
3927a984708SDavid Chisnallprotected:
3937a984708SDavid Chisnall    virtual result
3947a984708SDavid Chisnall        do_out(state_type& __st,
3957a984708SDavid Chisnall               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
3967a984708SDavid Chisnall               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
3977a984708SDavid Chisnall    virtual result
3987a984708SDavid Chisnall        do_in(state_type& __st,
3997a984708SDavid Chisnall              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
4007a984708SDavid Chisnall              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
4017a984708SDavid Chisnall    virtual result
4027a984708SDavid Chisnall        do_unshift(state_type& __st,
4037a984708SDavid Chisnall                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
4047a984708SDavid Chisnall    virtual int do_encoding() const throw();
4057a984708SDavid Chisnall    virtual bool do_always_noconv() const throw();
4067a984708SDavid Chisnall    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
4077a984708SDavid Chisnall                          size_t __mx) const;
4087a984708SDavid Chisnall    virtual int do_max_length() const throw();
4097a984708SDavid Chisnall};
4107a984708SDavid Chisnall
4117a984708SDavid Chisnalltemplate <class _Elem, unsigned long _Maxcode = 0x10ffff,
4127a984708SDavid Chisnall          codecvt_mode _Mode = (codecvt_mode)0>
413aed8d94eSDimitry Andricclass _LIBCPP_TEMPLATE_VIS codecvt_utf16
4147a984708SDavid Chisnall    : public __codecvt_utf16<_Elem, _Mode & little_endian>
4157a984708SDavid Chisnall{
4167a984708SDavid Chisnallpublic:
417*4ba319b5SDimitry Andric    _LIBCPP_INLINE_VISIBILITY
4187a984708SDavid Chisnall    explicit codecvt_utf16(size_t __refs = 0)
4197a984708SDavid Chisnall        : __codecvt_utf16<_Elem, _Mode & little_endian>(__refs, _Maxcode, _Mode) {}
4207a984708SDavid Chisnall
421*4ba319b5SDimitry Andric    _LIBCPP_INLINE_VISIBILITY
4227a984708SDavid Chisnall    ~codecvt_utf16() {}
4237a984708SDavid Chisnall};
4247a984708SDavid Chisnall
4257a984708SDavid Chisnall// codecvt_utf8_utf16
4267a984708SDavid Chisnall
4277a984708SDavid Chisnalltemplate <class _Elem> class __codecvt_utf8_utf16;
4287a984708SDavid Chisnall
4297a984708SDavid Chisnalltemplate <>
4304f7ab58eSDimitry Andricclass _LIBCPP_TYPE_VIS __codecvt_utf8_utf16<wchar_t>
4317a984708SDavid Chisnall    : public codecvt<wchar_t, char, mbstate_t>
4327a984708SDavid Chisnall{
4337a984708SDavid Chisnall    unsigned long _Maxcode_;
4347a984708SDavid Chisnall    codecvt_mode _Mode_;
4357a984708SDavid Chisnallpublic:
4367a984708SDavid Chisnall    typedef wchar_t   intern_type;
4377a984708SDavid Chisnall    typedef char      extern_type;
4387a984708SDavid Chisnall    typedef mbstate_t state_type;
4397a984708SDavid Chisnall
440*4ba319b5SDimitry Andric    _LIBCPP_INLINE_VISIBILITY
4417a984708SDavid Chisnall    explicit __codecvt_utf8_utf16(size_t __refs, unsigned long _Maxcode,
4427a984708SDavid Chisnall                            codecvt_mode _Mode)
4437a984708SDavid Chisnall        : codecvt<wchar_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
4447a984708SDavid Chisnall          _Mode_(_Mode) {}
4457a984708SDavid Chisnallprotected:
4467a984708SDavid Chisnall    virtual result
4477a984708SDavid Chisnall        do_out(state_type& __st,
4487a984708SDavid Chisnall               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
4497a984708SDavid Chisnall               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
4507a984708SDavid Chisnall    virtual result
4517a984708SDavid Chisnall        do_in(state_type& __st,
4527a984708SDavid Chisnall              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
4537a984708SDavid Chisnall              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
4547a984708SDavid Chisnall    virtual result
4557a984708SDavid Chisnall        do_unshift(state_type& __st,
4567a984708SDavid Chisnall                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
4577a984708SDavid Chisnall    virtual int do_encoding() const throw();
4587a984708SDavid Chisnall    virtual bool do_always_noconv() const throw();
4597a984708SDavid Chisnall    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
4607a984708SDavid Chisnall                          size_t __mx) const;
4617a984708SDavid Chisnall    virtual int do_max_length() const throw();
4627a984708SDavid Chisnall};
4637a984708SDavid Chisnall
4647a984708SDavid Chisnalltemplate <>
4654f7ab58eSDimitry Andricclass _LIBCPP_TYPE_VIS __codecvt_utf8_utf16<char32_t>
4667a984708SDavid Chisnall    : public codecvt<char32_t, char, mbstate_t>
4677a984708SDavid Chisnall{
4687a984708SDavid Chisnall    unsigned long _Maxcode_;
4697a984708SDavid Chisnall    codecvt_mode _Mode_;
4707a984708SDavid Chisnallpublic:
4717a984708SDavid Chisnall    typedef char32_t  intern_type;
4727a984708SDavid Chisnall    typedef char      extern_type;
4737a984708SDavid Chisnall    typedef mbstate_t state_type;
4747a984708SDavid Chisnall
475*4ba319b5SDimitry Andric    _LIBCPP_INLINE_VISIBILITY
4767a984708SDavid Chisnall    explicit __codecvt_utf8_utf16(size_t __refs, unsigned long _Maxcode,
4777a984708SDavid Chisnall                            codecvt_mode _Mode)
4787a984708SDavid Chisnall        : codecvt<char32_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
4797a984708SDavid Chisnall          _Mode_(_Mode) {}
4807a984708SDavid Chisnallprotected:
4817a984708SDavid Chisnall    virtual result
4827a984708SDavid Chisnall        do_out(state_type& __st,
4837a984708SDavid Chisnall               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
4847a984708SDavid Chisnall               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
4857a984708SDavid Chisnall    virtual result
4867a984708SDavid Chisnall        do_in(state_type& __st,
4877a984708SDavid Chisnall              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
4887a984708SDavid Chisnall              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
4897a984708SDavid Chisnall    virtual result
4907a984708SDavid Chisnall        do_unshift(state_type& __st,
4917a984708SDavid Chisnall                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
4927a984708SDavid Chisnall    virtual int do_encoding() const throw();
4937a984708SDavid Chisnall    virtual bool do_always_noconv() const throw();
4947a984708SDavid Chisnall    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
4957a984708SDavid Chisnall                          size_t __mx) const;
4967a984708SDavid Chisnall    virtual int do_max_length() const throw();
4977a984708SDavid Chisnall};
4987a984708SDavid Chisnall
4997a984708SDavid Chisnalltemplate <>
5004f7ab58eSDimitry Andricclass _LIBCPP_TYPE_VIS __codecvt_utf8_utf16<char16_t>
5017a984708SDavid Chisnall    : public codecvt<char16_t, char, mbstate_t>
5027a984708SDavid Chisnall{
5037a984708SDavid Chisnall    unsigned long _Maxcode_;
5047a984708SDavid Chisnall    codecvt_mode _Mode_;
5057a984708SDavid Chisnallpublic:
5067a984708SDavid Chisnall    typedef char16_t  intern_type;
5077a984708SDavid Chisnall    typedef char      extern_type;
5087a984708SDavid Chisnall    typedef mbstate_t state_type;
5097a984708SDavid Chisnall
510*4ba319b5SDimitry Andric    _LIBCPP_INLINE_VISIBILITY
5117a984708SDavid Chisnall    explicit __codecvt_utf8_utf16(size_t __refs, unsigned long _Maxcode,
5127a984708SDavid Chisnall                            codecvt_mode _Mode)
5137a984708SDavid Chisnall        : codecvt<char16_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
5147a984708SDavid Chisnall          _Mode_(_Mode) {}
5157a984708SDavid Chisnallprotected:
5167a984708SDavid Chisnall    virtual result
5177a984708SDavid Chisnall        do_out(state_type& __st,
5187a984708SDavid Chisnall               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
5197a984708SDavid Chisnall               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
5207a984708SDavid Chisnall    virtual result
5217a984708SDavid Chisnall        do_in(state_type& __st,
5227a984708SDavid Chisnall              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
5237a984708SDavid Chisnall              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
5247a984708SDavid Chisnall    virtual result
5257a984708SDavid Chisnall        do_unshift(state_type& __st,
5267a984708SDavid Chisnall                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
5277a984708SDavid Chisnall    virtual int do_encoding() const throw();
5287a984708SDavid Chisnall    virtual bool do_always_noconv() const throw();
5297a984708SDavid Chisnall    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
5307a984708SDavid Chisnall                          size_t __mx) const;
5317a984708SDavid Chisnall    virtual int do_max_length() const throw();
5327a984708SDavid Chisnall};
5337a984708SDavid Chisnall
5347a984708SDavid Chisnalltemplate <class _Elem, unsigned long _Maxcode = 0x10ffff,
5357a984708SDavid Chisnall          codecvt_mode _Mode = (codecvt_mode)0>
536aed8d94eSDimitry Andricclass _LIBCPP_TEMPLATE_VIS codecvt_utf8_utf16
5377a984708SDavid Chisnall    : public __codecvt_utf8_utf16<_Elem>
5387a984708SDavid Chisnall{
5397a984708SDavid Chisnallpublic:
540*4ba319b5SDimitry Andric    _LIBCPP_INLINE_VISIBILITY
5417a984708SDavid Chisnall    explicit codecvt_utf8_utf16(size_t __refs = 0)
5427a984708SDavid Chisnall        : __codecvt_utf8_utf16<_Elem>(__refs, _Maxcode, _Mode) {}
5437a984708SDavid Chisnall
544*4ba319b5SDimitry Andric    _LIBCPP_INLINE_VISIBILITY
5457a984708SDavid Chisnall    ~codecvt_utf8_utf16() {}
5467a984708SDavid Chisnall};
5477a984708SDavid Chisnall
5487a984708SDavid Chisnall_LIBCPP_END_NAMESPACE_STD
5497a984708SDavid Chisnall
5507a984708SDavid Chisnall#endif  // _LIBCPP_CODECVT
551