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