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