1*700637cbSDimitry Andric// -*- C++ -*- 2*700637cbSDimitry Andric//===----------------------------------------------------------------------===// 3*700637cbSDimitry Andric// 4*700637cbSDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 5*700637cbSDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 6*700637cbSDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 7*700637cbSDimitry Andric// 8*700637cbSDimitry Andric//===----------------------------------------------------------------------===// 9*700637cbSDimitry Andric 10*700637cbSDimitry Andric#ifndef _LIBCPP___CXX03_CODECVT 11*700637cbSDimitry Andric#define _LIBCPP___CXX03_CODECVT 12*700637cbSDimitry Andric 13*700637cbSDimitry Andric/* 14*700637cbSDimitry Andric codecvt synopsis 15*700637cbSDimitry Andric 16*700637cbSDimitry Andricnamespace std 17*700637cbSDimitry Andric{ 18*700637cbSDimitry Andric 19*700637cbSDimitry Andricenum codecvt_mode 20*700637cbSDimitry Andric{ 21*700637cbSDimitry Andric consume_header = 4, 22*700637cbSDimitry Andric generate_header = 2, 23*700637cbSDimitry Andric little_endian = 1 24*700637cbSDimitry Andric}; 25*700637cbSDimitry Andric 26*700637cbSDimitry Andrictemplate <class Elem, unsigned long Maxcode = 0x10ffff, 27*700637cbSDimitry Andric codecvt_mode Mode = (codecvt_mode)0> 28*700637cbSDimitry Andricclass codecvt_utf8 29*700637cbSDimitry Andric : public codecvt<Elem, char, mbstate_t> 30*700637cbSDimitry Andric{ 31*700637cbSDimitry Andric explicit codecvt_utf8(size_t refs = 0); 32*700637cbSDimitry Andric ~codecvt_utf8(); 33*700637cbSDimitry Andric}; 34*700637cbSDimitry Andric 35*700637cbSDimitry Andrictemplate <class Elem, unsigned long Maxcode = 0x10ffff, 36*700637cbSDimitry Andric codecvt_mode Mode = (codecvt_mode)0> 37*700637cbSDimitry Andricclass codecvt_utf16 38*700637cbSDimitry Andric : public codecvt<Elem, char, mbstate_t> 39*700637cbSDimitry Andric{ 40*700637cbSDimitry Andric explicit codecvt_utf16(size_t refs = 0); 41*700637cbSDimitry Andric ~codecvt_utf16(); 42*700637cbSDimitry Andric}; 43*700637cbSDimitry Andric 44*700637cbSDimitry Andrictemplate <class Elem, unsigned long Maxcode = 0x10ffff, 45*700637cbSDimitry Andric codecvt_mode Mode = (codecvt_mode)0> 46*700637cbSDimitry Andricclass codecvt_utf8_utf16 47*700637cbSDimitry Andric : public codecvt<Elem, char, mbstate_t> 48*700637cbSDimitry Andric{ 49*700637cbSDimitry Andric explicit codecvt_utf8_utf16(size_t refs = 0); 50*700637cbSDimitry Andric ~codecvt_utf8_utf16(); 51*700637cbSDimitry Andric}; 52*700637cbSDimitry Andric 53*700637cbSDimitry Andric} // std 54*700637cbSDimitry Andric 55*700637cbSDimitry Andric*/ 56*700637cbSDimitry Andric 57*700637cbSDimitry Andric#include <__cxx03/__config> 58*700637cbSDimitry Andric#include <__cxx03/__locale> 59*700637cbSDimitry Andric#include <__cxx03/version> 60*700637cbSDimitry Andric 61*700637cbSDimitry Andric#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 62*700637cbSDimitry Andric# pragma GCC system_header 63*700637cbSDimitry Andric#endif 64*700637cbSDimitry Andric 65*700637cbSDimitry Andric_LIBCPP_BEGIN_NAMESPACE_STD 66*700637cbSDimitry Andric 67*700637cbSDimitry Andricenum codecvt_mode { consume_header = 4, generate_header = 2, little_endian = 1 }; 68*700637cbSDimitry Andric 69*700637cbSDimitry Andric// codecvt_utf8 70*700637cbSDimitry Andric 71*700637cbSDimitry Andrictemplate <class _Elem> 72*700637cbSDimitry Andricclass __codecvt_utf8; 73*700637cbSDimitry Andric 74*700637cbSDimitry Andric#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS 75*700637cbSDimitry Andrictemplate <> 76*700637cbSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf8<wchar_t> : public codecvt<wchar_t, char, mbstate_t> { 77*700637cbSDimitry Andric unsigned long __maxcode_; 78*700637cbSDimitry Andric _LIBCPP_SUPPRESS_DEPRECATED_PUSH 79*700637cbSDimitry Andric codecvt_mode __mode_; 80*700637cbSDimitry Andric _LIBCPP_SUPPRESS_DEPRECATED_POP 81*700637cbSDimitry Andric 82*700637cbSDimitry Andricpublic: 83*700637cbSDimitry Andric typedef wchar_t intern_type; 84*700637cbSDimitry Andric typedef char extern_type; 85*700637cbSDimitry Andric typedef mbstate_t state_type; 86*700637cbSDimitry Andric 87*700637cbSDimitry Andric _LIBCPP_SUPPRESS_DEPRECATED_PUSH 88*700637cbSDimitry Andric _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf8(size_t __refs, unsigned long __maxcode, codecvt_mode __mode) 89*700637cbSDimitry Andric : codecvt<wchar_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {} 90*700637cbSDimitry Andric _LIBCPP_SUPPRESS_DEPRECATED_POP 91*700637cbSDimitry Andric 92*700637cbSDimitry Andricprotected: 93*700637cbSDimitry Andric result do_out(state_type& __st, 94*700637cbSDimitry Andric const intern_type* __frm, 95*700637cbSDimitry Andric const intern_type* __frm_end, 96*700637cbSDimitry Andric const intern_type*& __frm_nxt, 97*700637cbSDimitry Andric extern_type* __to, 98*700637cbSDimitry Andric extern_type* __to_end, 99*700637cbSDimitry Andric extern_type*& __to_nxt) const override; 100*700637cbSDimitry Andric result do_in(state_type& __st, 101*700637cbSDimitry Andric const extern_type* __frm, 102*700637cbSDimitry Andric const extern_type* __frm_end, 103*700637cbSDimitry Andric const extern_type*& __frm_nxt, 104*700637cbSDimitry Andric intern_type* __to, 105*700637cbSDimitry Andric intern_type* __to_end, 106*700637cbSDimitry Andric intern_type*& __to_nxt) const override; 107*700637cbSDimitry Andric result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override; 108*700637cbSDimitry Andric int do_encoding() const _NOEXCEPT override; 109*700637cbSDimitry Andric bool do_always_noconv() const _NOEXCEPT override; 110*700637cbSDimitry Andric int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override; 111*700637cbSDimitry Andric int do_max_length() const _NOEXCEPT override; 112*700637cbSDimitry Andric}; 113*700637cbSDimitry Andric#endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS 114*700637cbSDimitry Andric 115*700637cbSDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_PUSH 116*700637cbSDimitry Andrictemplate <> 117*700637cbSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf8<char16_t> : public codecvt<char16_t, char, mbstate_t> { 118*700637cbSDimitry Andric unsigned long __maxcode_; 119*700637cbSDimitry Andric codecvt_mode __mode_; 120*700637cbSDimitry Andric 121*700637cbSDimitry Andricpublic: 122*700637cbSDimitry Andric typedef char16_t intern_type; 123*700637cbSDimitry Andric typedef char extern_type; 124*700637cbSDimitry Andric typedef mbstate_t state_type; 125*700637cbSDimitry Andric 126*700637cbSDimitry Andric _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf8(size_t __refs, unsigned long __maxcode, codecvt_mode __mode) 127*700637cbSDimitry Andric : codecvt<char16_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {} 128*700637cbSDimitry Andric _LIBCPP_SUPPRESS_DEPRECATED_POP 129*700637cbSDimitry Andric 130*700637cbSDimitry Andricprotected: 131*700637cbSDimitry Andric result do_out(state_type& __st, 132*700637cbSDimitry Andric const intern_type* __frm, 133*700637cbSDimitry Andric const intern_type* __frm_end, 134*700637cbSDimitry Andric const intern_type*& __frm_nxt, 135*700637cbSDimitry Andric extern_type* __to, 136*700637cbSDimitry Andric extern_type* __to_end, 137*700637cbSDimitry Andric extern_type*& __to_nxt) const override; 138*700637cbSDimitry Andric result do_in(state_type& __st, 139*700637cbSDimitry Andric const extern_type* __frm, 140*700637cbSDimitry Andric const extern_type* __frm_end, 141*700637cbSDimitry Andric const extern_type*& __frm_nxt, 142*700637cbSDimitry Andric intern_type* __to, 143*700637cbSDimitry Andric intern_type* __to_end, 144*700637cbSDimitry Andric intern_type*& __to_nxt) const override; 145*700637cbSDimitry Andric result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override; 146*700637cbSDimitry Andric int do_encoding() const _NOEXCEPT override; 147*700637cbSDimitry Andric bool do_always_noconv() const _NOEXCEPT override; 148*700637cbSDimitry Andric int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override; 149*700637cbSDimitry Andric int do_max_length() const _NOEXCEPT override; 150*700637cbSDimitry Andric}; 151*700637cbSDimitry Andric 152*700637cbSDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_PUSH 153*700637cbSDimitry Andrictemplate <> 154*700637cbSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf8<char32_t> : public codecvt<char32_t, char, mbstate_t> { 155*700637cbSDimitry Andric unsigned long __maxcode_; 156*700637cbSDimitry Andric codecvt_mode __mode_; 157*700637cbSDimitry Andric 158*700637cbSDimitry Andricpublic: 159*700637cbSDimitry Andric typedef char32_t intern_type; 160*700637cbSDimitry Andric typedef char extern_type; 161*700637cbSDimitry Andric typedef mbstate_t state_type; 162*700637cbSDimitry Andric 163*700637cbSDimitry Andric _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf8(size_t __refs, unsigned long __maxcode, codecvt_mode __mode) 164*700637cbSDimitry Andric : codecvt<char32_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {} 165*700637cbSDimitry Andric _LIBCPP_SUPPRESS_DEPRECATED_POP 166*700637cbSDimitry Andric 167*700637cbSDimitry Andricprotected: 168*700637cbSDimitry Andric result do_out(state_type& __st, 169*700637cbSDimitry Andric const intern_type* __frm, 170*700637cbSDimitry Andric const intern_type* __frm_end, 171*700637cbSDimitry Andric const intern_type*& __frm_nxt, 172*700637cbSDimitry Andric extern_type* __to, 173*700637cbSDimitry Andric extern_type* __to_end, 174*700637cbSDimitry Andric extern_type*& __to_nxt) const override; 175*700637cbSDimitry Andric result do_in(state_type& __st, 176*700637cbSDimitry Andric const extern_type* __frm, 177*700637cbSDimitry Andric const extern_type* __frm_end, 178*700637cbSDimitry Andric const extern_type*& __frm_nxt, 179*700637cbSDimitry Andric intern_type* __to, 180*700637cbSDimitry Andric intern_type* __to_end, 181*700637cbSDimitry Andric intern_type*& __to_nxt) const override; 182*700637cbSDimitry Andric result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override; 183*700637cbSDimitry Andric int do_encoding() const _NOEXCEPT override; 184*700637cbSDimitry Andric bool do_always_noconv() const _NOEXCEPT override; 185*700637cbSDimitry Andric int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override; 186*700637cbSDimitry Andric int do_max_length() const _NOEXCEPT override; 187*700637cbSDimitry Andric}; 188*700637cbSDimitry Andric 189*700637cbSDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_PUSH 190*700637cbSDimitry Andrictemplate <class _Elem, unsigned long _Maxcode = 0x10ffff, codecvt_mode _Mode = (codecvt_mode)0> 191*700637cbSDimitry Andricclass _LIBCPP_TEMPLATE_VIS codecvt_utf8 : public __codecvt_utf8<_Elem> { 192*700637cbSDimitry Andricpublic: 193*700637cbSDimitry Andric _LIBCPP_HIDE_FROM_ABI explicit codecvt_utf8(size_t __refs = 0) : __codecvt_utf8<_Elem>(__refs, _Maxcode, _Mode) {} 194*700637cbSDimitry Andric 195*700637cbSDimitry Andric _LIBCPP_HIDE_FROM_ABI ~codecvt_utf8() {} 196*700637cbSDimitry Andric}; 197*700637cbSDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_POP 198*700637cbSDimitry Andric 199*700637cbSDimitry Andric// codecvt_utf16 200*700637cbSDimitry Andric 201*700637cbSDimitry Andrictemplate <class _Elem, bool _LittleEndian> 202*700637cbSDimitry Andricclass __codecvt_utf16; 203*700637cbSDimitry Andric 204*700637cbSDimitry Andric#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS 205*700637cbSDimitry Andrictemplate <> 206*700637cbSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf16<wchar_t, false> : public codecvt<wchar_t, char, mbstate_t> { 207*700637cbSDimitry Andric unsigned long __maxcode_; 208*700637cbSDimitry Andric _LIBCPP_SUPPRESS_DEPRECATED_PUSH 209*700637cbSDimitry Andric codecvt_mode __mode_; 210*700637cbSDimitry Andric _LIBCPP_SUPPRESS_DEPRECATED_POP 211*700637cbSDimitry Andric 212*700637cbSDimitry Andricpublic: 213*700637cbSDimitry Andric typedef wchar_t intern_type; 214*700637cbSDimitry Andric typedef char extern_type; 215*700637cbSDimitry Andric typedef mbstate_t state_type; 216*700637cbSDimitry Andric 217*700637cbSDimitry Andric _LIBCPP_SUPPRESS_DEPRECATED_PUSH 218*700637cbSDimitry Andric _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf16(size_t __refs, unsigned long __maxcode, codecvt_mode __mode) 219*700637cbSDimitry Andric : codecvt<wchar_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {} 220*700637cbSDimitry Andric _LIBCPP_SUPPRESS_DEPRECATED_POP 221*700637cbSDimitry Andric 222*700637cbSDimitry Andricprotected: 223*700637cbSDimitry Andric result do_out(state_type& __st, 224*700637cbSDimitry Andric const intern_type* __frm, 225*700637cbSDimitry Andric const intern_type* __frm_end, 226*700637cbSDimitry Andric const intern_type*& __frm_nxt, 227*700637cbSDimitry Andric extern_type* __to, 228*700637cbSDimitry Andric extern_type* __to_end, 229*700637cbSDimitry Andric extern_type*& __to_nxt) const override; 230*700637cbSDimitry Andric result do_in(state_type& __st, 231*700637cbSDimitry Andric const extern_type* __frm, 232*700637cbSDimitry Andric const extern_type* __frm_end, 233*700637cbSDimitry Andric const extern_type*& __frm_nxt, 234*700637cbSDimitry Andric intern_type* __to, 235*700637cbSDimitry Andric intern_type* __to_end, 236*700637cbSDimitry Andric intern_type*& __to_nxt) const override; 237*700637cbSDimitry Andric result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override; 238*700637cbSDimitry Andric int do_encoding() const _NOEXCEPT override; 239*700637cbSDimitry Andric bool do_always_noconv() const _NOEXCEPT override; 240*700637cbSDimitry Andric int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override; 241*700637cbSDimitry Andric int do_max_length() const _NOEXCEPT override; 242*700637cbSDimitry Andric}; 243*700637cbSDimitry Andric 244*700637cbSDimitry Andrictemplate <> 245*700637cbSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf16<wchar_t, true> : public codecvt<wchar_t, char, mbstate_t> { 246*700637cbSDimitry Andric unsigned long __maxcode_; 247*700637cbSDimitry Andric _LIBCPP_SUPPRESS_DEPRECATED_PUSH 248*700637cbSDimitry Andric codecvt_mode __mode_; 249*700637cbSDimitry Andric _LIBCPP_SUPPRESS_DEPRECATED_POP 250*700637cbSDimitry Andric 251*700637cbSDimitry Andricpublic: 252*700637cbSDimitry Andric typedef wchar_t intern_type; 253*700637cbSDimitry Andric typedef char extern_type; 254*700637cbSDimitry Andric typedef mbstate_t state_type; 255*700637cbSDimitry Andric 256*700637cbSDimitry Andric _LIBCPP_SUPPRESS_DEPRECATED_PUSH 257*700637cbSDimitry Andric _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf16(size_t __refs, unsigned long __maxcode, codecvt_mode __mode) 258*700637cbSDimitry Andric : codecvt<wchar_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {} 259*700637cbSDimitry Andric _LIBCPP_SUPPRESS_DEPRECATED_POP 260*700637cbSDimitry Andric 261*700637cbSDimitry Andricprotected: 262*700637cbSDimitry Andric result do_out(state_type& __st, 263*700637cbSDimitry Andric const intern_type* __frm, 264*700637cbSDimitry Andric const intern_type* __frm_end, 265*700637cbSDimitry Andric const intern_type*& __frm_nxt, 266*700637cbSDimitry Andric extern_type* __to, 267*700637cbSDimitry Andric extern_type* __to_end, 268*700637cbSDimitry Andric extern_type*& __to_nxt) const override; 269*700637cbSDimitry Andric result do_in(state_type& __st, 270*700637cbSDimitry Andric const extern_type* __frm, 271*700637cbSDimitry Andric const extern_type* __frm_end, 272*700637cbSDimitry Andric const extern_type*& __frm_nxt, 273*700637cbSDimitry Andric intern_type* __to, 274*700637cbSDimitry Andric intern_type* __to_end, 275*700637cbSDimitry Andric intern_type*& __to_nxt) const override; 276*700637cbSDimitry Andric result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override; 277*700637cbSDimitry Andric int do_encoding() const _NOEXCEPT override; 278*700637cbSDimitry Andric bool do_always_noconv() const _NOEXCEPT override; 279*700637cbSDimitry Andric int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override; 280*700637cbSDimitry Andric int do_max_length() const _NOEXCEPT override; 281*700637cbSDimitry Andric}; 282*700637cbSDimitry Andric#endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS 283*700637cbSDimitry Andric 284*700637cbSDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_PUSH 285*700637cbSDimitry Andrictemplate <> 286*700637cbSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf16<char16_t, false> : public codecvt<char16_t, char, mbstate_t> { 287*700637cbSDimitry Andric unsigned long __maxcode_; 288*700637cbSDimitry Andric codecvt_mode __mode_; 289*700637cbSDimitry Andric 290*700637cbSDimitry Andricpublic: 291*700637cbSDimitry Andric typedef char16_t intern_type; 292*700637cbSDimitry Andric typedef char extern_type; 293*700637cbSDimitry Andric typedef mbstate_t state_type; 294*700637cbSDimitry Andric 295*700637cbSDimitry Andric _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf16(size_t __refs, unsigned long __maxcode, codecvt_mode __mode) 296*700637cbSDimitry Andric : codecvt<char16_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {} 297*700637cbSDimitry Andric _LIBCPP_SUPPRESS_DEPRECATED_POP 298*700637cbSDimitry Andric 299*700637cbSDimitry Andricprotected: 300*700637cbSDimitry Andric result do_out(state_type& __st, 301*700637cbSDimitry Andric const intern_type* __frm, 302*700637cbSDimitry Andric const intern_type* __frm_end, 303*700637cbSDimitry Andric const intern_type*& __frm_nxt, 304*700637cbSDimitry Andric extern_type* __to, 305*700637cbSDimitry Andric extern_type* __to_end, 306*700637cbSDimitry Andric extern_type*& __to_nxt) const override; 307*700637cbSDimitry Andric result do_in(state_type& __st, 308*700637cbSDimitry Andric const extern_type* __frm, 309*700637cbSDimitry Andric const extern_type* __frm_end, 310*700637cbSDimitry Andric const extern_type*& __frm_nxt, 311*700637cbSDimitry Andric intern_type* __to, 312*700637cbSDimitry Andric intern_type* __to_end, 313*700637cbSDimitry Andric intern_type*& __to_nxt) const override; 314*700637cbSDimitry Andric result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override; 315*700637cbSDimitry Andric int do_encoding() const _NOEXCEPT override; 316*700637cbSDimitry Andric bool do_always_noconv() const _NOEXCEPT override; 317*700637cbSDimitry Andric int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override; 318*700637cbSDimitry Andric int do_max_length() const _NOEXCEPT override; 319*700637cbSDimitry Andric}; 320*700637cbSDimitry Andric 321*700637cbSDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_PUSH 322*700637cbSDimitry Andrictemplate <> 323*700637cbSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf16<char16_t, true> : public codecvt<char16_t, char, mbstate_t> { 324*700637cbSDimitry Andric unsigned long __maxcode_; 325*700637cbSDimitry Andric codecvt_mode __mode_; 326*700637cbSDimitry Andric 327*700637cbSDimitry Andricpublic: 328*700637cbSDimitry Andric typedef char16_t intern_type; 329*700637cbSDimitry Andric typedef char extern_type; 330*700637cbSDimitry Andric typedef mbstate_t state_type; 331*700637cbSDimitry Andric 332*700637cbSDimitry Andric _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf16(size_t __refs, unsigned long __maxcode, codecvt_mode __mode) 333*700637cbSDimitry Andric : codecvt<char16_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {} 334*700637cbSDimitry Andric _LIBCPP_SUPPRESS_DEPRECATED_POP 335*700637cbSDimitry Andric 336*700637cbSDimitry Andricprotected: 337*700637cbSDimitry Andric result do_out(state_type& __st, 338*700637cbSDimitry Andric const intern_type* __frm, 339*700637cbSDimitry Andric const intern_type* __frm_end, 340*700637cbSDimitry Andric const intern_type*& __frm_nxt, 341*700637cbSDimitry Andric extern_type* __to, 342*700637cbSDimitry Andric extern_type* __to_end, 343*700637cbSDimitry Andric extern_type*& __to_nxt) const override; 344*700637cbSDimitry Andric result do_in(state_type& __st, 345*700637cbSDimitry Andric const extern_type* __frm, 346*700637cbSDimitry Andric const extern_type* __frm_end, 347*700637cbSDimitry Andric const extern_type*& __frm_nxt, 348*700637cbSDimitry Andric intern_type* __to, 349*700637cbSDimitry Andric intern_type* __to_end, 350*700637cbSDimitry Andric intern_type*& __to_nxt) const override; 351*700637cbSDimitry Andric result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override; 352*700637cbSDimitry Andric int do_encoding() const _NOEXCEPT override; 353*700637cbSDimitry Andric bool do_always_noconv() const _NOEXCEPT override; 354*700637cbSDimitry Andric int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override; 355*700637cbSDimitry Andric int do_max_length() const _NOEXCEPT override; 356*700637cbSDimitry Andric}; 357*700637cbSDimitry Andric 358*700637cbSDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_PUSH 359*700637cbSDimitry Andrictemplate <> 360*700637cbSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf16<char32_t, false> : public codecvt<char32_t, char, mbstate_t> { 361*700637cbSDimitry Andric unsigned long __maxcode_; 362*700637cbSDimitry Andric codecvt_mode __mode_; 363*700637cbSDimitry Andric 364*700637cbSDimitry Andricpublic: 365*700637cbSDimitry Andric typedef char32_t intern_type; 366*700637cbSDimitry Andric typedef char extern_type; 367*700637cbSDimitry Andric typedef mbstate_t state_type; 368*700637cbSDimitry Andric 369*700637cbSDimitry Andric _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf16(size_t __refs, unsigned long __maxcode, codecvt_mode __mode) 370*700637cbSDimitry Andric : codecvt<char32_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {} 371*700637cbSDimitry Andric _LIBCPP_SUPPRESS_DEPRECATED_POP 372*700637cbSDimitry Andric 373*700637cbSDimitry Andricprotected: 374*700637cbSDimitry Andric result do_out(state_type& __st, 375*700637cbSDimitry Andric const intern_type* __frm, 376*700637cbSDimitry Andric const intern_type* __frm_end, 377*700637cbSDimitry Andric const intern_type*& __frm_nxt, 378*700637cbSDimitry Andric extern_type* __to, 379*700637cbSDimitry Andric extern_type* __to_end, 380*700637cbSDimitry Andric extern_type*& __to_nxt) const override; 381*700637cbSDimitry Andric result do_in(state_type& __st, 382*700637cbSDimitry Andric const extern_type* __frm, 383*700637cbSDimitry Andric const extern_type* __frm_end, 384*700637cbSDimitry Andric const extern_type*& __frm_nxt, 385*700637cbSDimitry Andric intern_type* __to, 386*700637cbSDimitry Andric intern_type* __to_end, 387*700637cbSDimitry Andric intern_type*& __to_nxt) const override; 388*700637cbSDimitry Andric result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override; 389*700637cbSDimitry Andric int do_encoding() const _NOEXCEPT override; 390*700637cbSDimitry Andric bool do_always_noconv() const _NOEXCEPT override; 391*700637cbSDimitry Andric int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override; 392*700637cbSDimitry Andric int do_max_length() const _NOEXCEPT override; 393*700637cbSDimitry Andric}; 394*700637cbSDimitry Andric 395*700637cbSDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_PUSH 396*700637cbSDimitry Andrictemplate <> 397*700637cbSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf16<char32_t, true> : public codecvt<char32_t, char, mbstate_t> { 398*700637cbSDimitry Andric unsigned long __maxcode_; 399*700637cbSDimitry Andric codecvt_mode __mode_; 400*700637cbSDimitry Andric 401*700637cbSDimitry Andricpublic: 402*700637cbSDimitry Andric typedef char32_t intern_type; 403*700637cbSDimitry Andric typedef char extern_type; 404*700637cbSDimitry Andric typedef mbstate_t state_type; 405*700637cbSDimitry Andric 406*700637cbSDimitry Andric _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf16(size_t __refs, unsigned long __maxcode, codecvt_mode __mode) 407*700637cbSDimitry Andric : codecvt<char32_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {} 408*700637cbSDimitry Andric _LIBCPP_SUPPRESS_DEPRECATED_POP 409*700637cbSDimitry Andric 410*700637cbSDimitry Andricprotected: 411*700637cbSDimitry Andric result do_out(state_type& __st, 412*700637cbSDimitry Andric const intern_type* __frm, 413*700637cbSDimitry Andric const intern_type* __frm_end, 414*700637cbSDimitry Andric const intern_type*& __frm_nxt, 415*700637cbSDimitry Andric extern_type* __to, 416*700637cbSDimitry Andric extern_type* __to_end, 417*700637cbSDimitry Andric extern_type*& __to_nxt) const override; 418*700637cbSDimitry Andric result do_in(state_type& __st, 419*700637cbSDimitry Andric const extern_type* __frm, 420*700637cbSDimitry Andric const extern_type* __frm_end, 421*700637cbSDimitry Andric const extern_type*& __frm_nxt, 422*700637cbSDimitry Andric intern_type* __to, 423*700637cbSDimitry Andric intern_type* __to_end, 424*700637cbSDimitry Andric intern_type*& __to_nxt) const override; 425*700637cbSDimitry Andric result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override; 426*700637cbSDimitry Andric int do_encoding() const _NOEXCEPT override; 427*700637cbSDimitry Andric bool do_always_noconv() const _NOEXCEPT override; 428*700637cbSDimitry Andric int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override; 429*700637cbSDimitry Andric int do_max_length() const _NOEXCEPT override; 430*700637cbSDimitry Andric}; 431*700637cbSDimitry Andric 432*700637cbSDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_PUSH 433*700637cbSDimitry Andrictemplate <class _Elem, unsigned long _Maxcode = 0x10ffff, codecvt_mode _Mode = (codecvt_mode)0> 434*700637cbSDimitry Andricclass _LIBCPP_TEMPLATE_VIS codecvt_utf16 : public __codecvt_utf16<_Elem, _Mode & little_endian> { 435*700637cbSDimitry Andricpublic: 436*700637cbSDimitry Andric _LIBCPP_HIDE_FROM_ABI explicit codecvt_utf16(size_t __refs = 0) 437*700637cbSDimitry Andric : __codecvt_utf16 < _Elem, 438*700637cbSDimitry Andric _Mode & little_endian > (__refs, _Maxcode, _Mode) {} 439*700637cbSDimitry Andric 440*700637cbSDimitry Andric _LIBCPP_HIDE_FROM_ABI ~codecvt_utf16() {} 441*700637cbSDimitry Andric}; 442*700637cbSDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_POP 443*700637cbSDimitry Andric 444*700637cbSDimitry Andric// codecvt_utf8_utf16 445*700637cbSDimitry Andric 446*700637cbSDimitry Andrictemplate <class _Elem> 447*700637cbSDimitry Andricclass __codecvt_utf8_utf16; 448*700637cbSDimitry Andric 449*700637cbSDimitry Andric#ifndef _LIBCPP_HAS_NO_WIDE_CHARACTERS 450*700637cbSDimitry Andrictemplate <> 451*700637cbSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf8_utf16<wchar_t> : public codecvt<wchar_t, char, mbstate_t> { 452*700637cbSDimitry Andric unsigned long __maxcode_; 453*700637cbSDimitry Andric _LIBCPP_SUPPRESS_DEPRECATED_PUSH 454*700637cbSDimitry Andric codecvt_mode __mode_; 455*700637cbSDimitry Andric _LIBCPP_SUPPRESS_DEPRECATED_POP 456*700637cbSDimitry Andric 457*700637cbSDimitry Andricpublic: 458*700637cbSDimitry Andric typedef wchar_t intern_type; 459*700637cbSDimitry Andric typedef char extern_type; 460*700637cbSDimitry Andric typedef mbstate_t state_type; 461*700637cbSDimitry Andric 462*700637cbSDimitry Andric _LIBCPP_SUPPRESS_DEPRECATED_PUSH 463*700637cbSDimitry Andric _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf8_utf16(size_t __refs, unsigned long __maxcode, codecvt_mode __mode) 464*700637cbSDimitry Andric : codecvt<wchar_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {} 465*700637cbSDimitry Andric _LIBCPP_SUPPRESS_DEPRECATED_POP 466*700637cbSDimitry Andric 467*700637cbSDimitry Andricprotected: 468*700637cbSDimitry Andric result do_out(state_type& __st, 469*700637cbSDimitry Andric const intern_type* __frm, 470*700637cbSDimitry Andric const intern_type* __frm_end, 471*700637cbSDimitry Andric const intern_type*& __frm_nxt, 472*700637cbSDimitry Andric extern_type* __to, 473*700637cbSDimitry Andric extern_type* __to_end, 474*700637cbSDimitry Andric extern_type*& __to_nxt) const override; 475*700637cbSDimitry Andric result do_in(state_type& __st, 476*700637cbSDimitry Andric const extern_type* __frm, 477*700637cbSDimitry Andric const extern_type* __frm_end, 478*700637cbSDimitry Andric const extern_type*& __frm_nxt, 479*700637cbSDimitry Andric intern_type* __to, 480*700637cbSDimitry Andric intern_type* __to_end, 481*700637cbSDimitry Andric intern_type*& __to_nxt) const override; 482*700637cbSDimitry Andric result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override; 483*700637cbSDimitry Andric int do_encoding() const _NOEXCEPT override; 484*700637cbSDimitry Andric bool do_always_noconv() const _NOEXCEPT override; 485*700637cbSDimitry Andric int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override; 486*700637cbSDimitry Andric int do_max_length() const _NOEXCEPT override; 487*700637cbSDimitry Andric}; 488*700637cbSDimitry Andric#endif // _LIBCPP_HAS_NO_WIDE_CHARACTERS 489*700637cbSDimitry Andric 490*700637cbSDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_PUSH 491*700637cbSDimitry Andrictemplate <> 492*700637cbSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf8_utf16<char32_t> : public codecvt<char32_t, char, mbstate_t> { 493*700637cbSDimitry Andric unsigned long __maxcode_; 494*700637cbSDimitry Andric codecvt_mode __mode_; 495*700637cbSDimitry Andric 496*700637cbSDimitry Andricpublic: 497*700637cbSDimitry Andric typedef char32_t intern_type; 498*700637cbSDimitry Andric typedef char extern_type; 499*700637cbSDimitry Andric typedef mbstate_t state_type; 500*700637cbSDimitry Andric 501*700637cbSDimitry Andric _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf8_utf16(size_t __refs, unsigned long __maxcode, codecvt_mode __mode) 502*700637cbSDimitry Andric : codecvt<char32_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {} 503*700637cbSDimitry Andric _LIBCPP_SUPPRESS_DEPRECATED_POP 504*700637cbSDimitry Andric 505*700637cbSDimitry Andricprotected: 506*700637cbSDimitry Andric result do_out(state_type& __st, 507*700637cbSDimitry Andric const intern_type* __frm, 508*700637cbSDimitry Andric const intern_type* __frm_end, 509*700637cbSDimitry Andric const intern_type*& __frm_nxt, 510*700637cbSDimitry Andric extern_type* __to, 511*700637cbSDimitry Andric extern_type* __to_end, 512*700637cbSDimitry Andric extern_type*& __to_nxt) const override; 513*700637cbSDimitry Andric result do_in(state_type& __st, 514*700637cbSDimitry Andric const extern_type* __frm, 515*700637cbSDimitry Andric const extern_type* __frm_end, 516*700637cbSDimitry Andric const extern_type*& __frm_nxt, 517*700637cbSDimitry Andric intern_type* __to, 518*700637cbSDimitry Andric intern_type* __to_end, 519*700637cbSDimitry Andric intern_type*& __to_nxt) const override; 520*700637cbSDimitry Andric result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override; 521*700637cbSDimitry Andric int do_encoding() const _NOEXCEPT override; 522*700637cbSDimitry Andric bool do_always_noconv() const _NOEXCEPT override; 523*700637cbSDimitry Andric int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override; 524*700637cbSDimitry Andric int do_max_length() const _NOEXCEPT override; 525*700637cbSDimitry Andric}; 526*700637cbSDimitry Andric 527*700637cbSDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_PUSH 528*700637cbSDimitry Andrictemplate <> 529*700637cbSDimitry Andricclass _LIBCPP_EXPORTED_FROM_ABI __codecvt_utf8_utf16<char16_t> : public codecvt<char16_t, char, mbstate_t> { 530*700637cbSDimitry Andric unsigned long __maxcode_; 531*700637cbSDimitry Andric codecvt_mode __mode_; 532*700637cbSDimitry Andric 533*700637cbSDimitry Andricpublic: 534*700637cbSDimitry Andric typedef char16_t intern_type; 535*700637cbSDimitry Andric typedef char extern_type; 536*700637cbSDimitry Andric typedef mbstate_t state_type; 537*700637cbSDimitry Andric 538*700637cbSDimitry Andric _LIBCPP_HIDE_FROM_ABI explicit __codecvt_utf8_utf16(size_t __refs, unsigned long __maxcode, codecvt_mode __mode) 539*700637cbSDimitry Andric : codecvt<char16_t, char, mbstate_t>(__refs), __maxcode_(__maxcode), __mode_(__mode) {} 540*700637cbSDimitry Andric _LIBCPP_SUPPRESS_DEPRECATED_POP 541*700637cbSDimitry Andric 542*700637cbSDimitry Andricprotected: 543*700637cbSDimitry Andric result do_out(state_type& __st, 544*700637cbSDimitry Andric const intern_type* __frm, 545*700637cbSDimitry Andric const intern_type* __frm_end, 546*700637cbSDimitry Andric const intern_type*& __frm_nxt, 547*700637cbSDimitry Andric extern_type* __to, 548*700637cbSDimitry Andric extern_type* __to_end, 549*700637cbSDimitry Andric extern_type*& __to_nxt) const override; 550*700637cbSDimitry Andric result do_in(state_type& __st, 551*700637cbSDimitry Andric const extern_type* __frm, 552*700637cbSDimitry Andric const extern_type* __frm_end, 553*700637cbSDimitry Andric const extern_type*& __frm_nxt, 554*700637cbSDimitry Andric intern_type* __to, 555*700637cbSDimitry Andric intern_type* __to_end, 556*700637cbSDimitry Andric intern_type*& __to_nxt) const override; 557*700637cbSDimitry Andric result do_unshift(state_type& __st, extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const override; 558*700637cbSDimitry Andric int do_encoding() const _NOEXCEPT override; 559*700637cbSDimitry Andric bool do_always_noconv() const _NOEXCEPT override; 560*700637cbSDimitry Andric int do_length(state_type&, const extern_type* __frm, const extern_type* __end, size_t __mx) const override; 561*700637cbSDimitry Andric int do_max_length() const _NOEXCEPT override; 562*700637cbSDimitry Andric}; 563*700637cbSDimitry Andric 564*700637cbSDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_PUSH 565*700637cbSDimitry Andrictemplate <class _Elem, unsigned long _Maxcode = 0x10ffff, codecvt_mode _Mode = (codecvt_mode)0> 566*700637cbSDimitry Andricclass _LIBCPP_TEMPLATE_VIS codecvt_utf8_utf16 : public __codecvt_utf8_utf16<_Elem> { 567*700637cbSDimitry Andricpublic: 568*700637cbSDimitry Andric _LIBCPP_HIDE_FROM_ABI explicit codecvt_utf8_utf16(size_t __refs = 0) 569*700637cbSDimitry Andric : __codecvt_utf8_utf16<_Elem>(__refs, _Maxcode, _Mode) {} 570*700637cbSDimitry Andric 571*700637cbSDimitry Andric _LIBCPP_HIDE_FROM_ABI ~codecvt_utf8_utf16() {} 572*700637cbSDimitry Andric}; 573*700637cbSDimitry Andric_LIBCPP_SUPPRESS_DEPRECATED_POP 574*700637cbSDimitry Andric 575*700637cbSDimitry Andric_LIBCPP_END_NAMESPACE_STD 576*700637cbSDimitry Andric 577*700637cbSDimitry Andric#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) 578*700637cbSDimitry Andric# include <__cxx03/atomic> 579*700637cbSDimitry Andric# include <__cxx03/cstddef> 580*700637cbSDimitry Andric# include <__cxx03/cstdlib> 581*700637cbSDimitry Andric# include <__cxx03/cstring> 582*700637cbSDimitry Andric# include <__cxx03/iosfwd> 583*700637cbSDimitry Andric# include <__cxx03/limits> 584*700637cbSDimitry Andric# include <__cxx03/mutex> 585*700637cbSDimitry Andric# include <__cxx03/new> 586*700637cbSDimitry Andric# include <__cxx03/stdexcept> 587*700637cbSDimitry Andric# include <__cxx03/type_traits> 588*700637cbSDimitry Andric# include <__cxx03/typeinfo> 589*700637cbSDimitry Andric#endif 590*700637cbSDimitry Andric 591*700637cbSDimitry Andric#endif // _LIBCPP___CXX03_CODECVT 592