codecvt revision 227825
1227825Stheraven// -*- C++ -*-
2227825Stheraven//===-------------------------- codecvt -----------------------------------===//
3227825Stheraven//
4227825Stheraven//                     The LLVM Compiler Infrastructure
5227825Stheraven//
6227825Stheraven// This file is dual licensed under the MIT and the University of Illinois Open
7227825Stheraven// Source Licenses. See LICENSE.TXT for details.
8227825Stheraven//
9227825Stheraven//===----------------------------------------------------------------------===//
10227825Stheraven
11227825Stheraven#ifndef _LIBCPP_CODECVT
12227825Stheraven#define _LIBCPP_CODECVT
13227825Stheraven
14227825Stheraven/*
15227825Stheraven    codecvt synopsis
16227825Stheraven
17227825Stheravennamespace std
18227825Stheraven{
19227825Stheraven
20227825Stheravenenum codecvt_mode
21227825Stheraven{
22227825Stheraven    consume_header = 4,
23227825Stheraven    generate_header = 2,
24227825Stheraven    little_endian = 1
25227825Stheraven};
26227825Stheraven
27227825Stheraventemplate <class Elem, unsigned long Maxcode = 0x10ffff,
28227825Stheraven          codecvt_mode Mode = (codecvt_mode)0>
29227825Stheravenclass codecvt_utf8
30227825Stheraven    : public codecvt<Elem, char, mbstate_t>
31227825Stheraven{
32227825Stheraven    // unspecified
33227825Stheraven};
34227825Stheraven
35227825Stheraventemplate <class Elem, unsigned long Maxcode = 0x10ffff,
36227825Stheraven          codecvt_mode Mode = (codecvt_mode)0>
37227825Stheravenclass codecvt_utf16
38227825Stheraven    : public codecvt<Elem, char, mbstate_t>
39227825Stheraven{
40227825Stheraven    // unspecified
41227825Stheraven};
42227825Stheraven
43227825Stheraventemplate <class Elem, unsigned long Maxcode = 0x10ffff,
44227825Stheraven          codecvt_mode Mode = (codecvt_mode)0>
45227825Stheravenclass codecvt_utf8_utf16
46227825Stheraven    : public codecvt<Elem, char, mbstate_t>
47227825Stheraven{
48227825Stheraven    // unspecified
49227825Stheraven};
50227825Stheraven
51227825Stheraven}  // std
52227825Stheraven
53227825Stheraven*/
54227825Stheraven
55227825Stheraven#include <__config>
56227825Stheraven#include <__locale>
57227825Stheraven
58227825Stheraven#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
59227825Stheraven#pragma GCC system_header
60227825Stheraven#endif
61227825Stheraven
62227825Stheraven_LIBCPP_BEGIN_NAMESPACE_STD
63227825Stheraven
64227825Stheravenenum codecvt_mode
65227825Stheraven{
66227825Stheraven    consume_header = 4,
67227825Stheraven    generate_header = 2,
68227825Stheraven    little_endian = 1
69227825Stheraven};
70227825Stheraven
71227825Stheraven// codecvt_utf8
72227825Stheraven
73227825Stheraventemplate <class _Elem> class __codecvt_utf8;
74227825Stheraven
75227825Stheraventemplate <>
76227825Stheravenclass __codecvt_utf8<wchar_t>
77227825Stheraven    : public codecvt<wchar_t, char, mbstate_t>
78227825Stheraven{
79227825Stheraven    unsigned long _Maxcode_;
80227825Stheraven    codecvt_mode _Mode_;
81227825Stheravenpublic:
82227825Stheraven    typedef wchar_t   intern_type;
83227825Stheraven    typedef char      extern_type;
84227825Stheraven    typedef mbstate_t state_type;
85227825Stheraven
86227825Stheraven    _LIBCPP_ALWAYS_INLINE
87227825Stheraven    explicit __codecvt_utf8(size_t __refs, unsigned long _Maxcode,
88227825Stheraven                            codecvt_mode _Mode)
89227825Stheraven        : codecvt<wchar_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
90227825Stheraven          _Mode_(_Mode) {}
91227825Stheravenprotected:
92227825Stheraven    virtual result
93227825Stheraven        do_out(state_type& __st,
94227825Stheraven               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
95227825Stheraven               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
96227825Stheraven    virtual result
97227825Stheraven        do_in(state_type& __st,
98227825Stheraven              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
99227825Stheraven              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
100227825Stheraven    virtual result
101227825Stheraven        do_unshift(state_type& __st,
102227825Stheraven                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
103227825Stheraven    virtual int do_encoding() const throw();
104227825Stheraven    virtual bool do_always_noconv() const throw();
105227825Stheraven    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
106227825Stheraven                          size_t __mx) const;
107227825Stheraven    virtual int do_max_length() const throw();
108227825Stheraven};
109227825Stheraven
110227825Stheraventemplate <>
111227825Stheravenclass __codecvt_utf8<char16_t>
112227825Stheraven    : public codecvt<char16_t, char, mbstate_t>
113227825Stheraven{
114227825Stheraven    unsigned long _Maxcode_;
115227825Stheraven    codecvt_mode _Mode_;
116227825Stheravenpublic:
117227825Stheraven    typedef char16_t  intern_type;
118227825Stheraven    typedef char      extern_type;
119227825Stheraven    typedef mbstate_t state_type;
120227825Stheraven
121227825Stheraven    _LIBCPP_ALWAYS_INLINE
122227825Stheraven    explicit __codecvt_utf8(size_t __refs, unsigned long _Maxcode,
123227825Stheraven                            codecvt_mode _Mode)
124227825Stheraven        : codecvt<char16_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
125227825Stheraven          _Mode_(_Mode) {}
126227825Stheravenprotected:
127227825Stheraven    virtual result
128227825Stheraven        do_out(state_type& __st,
129227825Stheraven               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
130227825Stheraven               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
131227825Stheraven    virtual result
132227825Stheraven        do_in(state_type& __st,
133227825Stheraven              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
134227825Stheraven              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
135227825Stheraven    virtual result
136227825Stheraven        do_unshift(state_type& __st,
137227825Stheraven                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
138227825Stheraven    virtual int do_encoding() const throw();
139227825Stheraven    virtual bool do_always_noconv() const throw();
140227825Stheraven    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
141227825Stheraven                          size_t __mx) const;
142227825Stheraven    virtual int do_max_length() const throw();
143227825Stheraven};
144227825Stheraven
145227825Stheraventemplate <>
146227825Stheravenclass __codecvt_utf8<char32_t>
147227825Stheraven    : public codecvt<char32_t, char, mbstate_t>
148227825Stheraven{
149227825Stheraven    unsigned long _Maxcode_;
150227825Stheraven    codecvt_mode _Mode_;
151227825Stheravenpublic:
152227825Stheraven    typedef char32_t  intern_type;
153227825Stheraven    typedef char      extern_type;
154227825Stheraven    typedef mbstate_t state_type;
155227825Stheraven
156227825Stheraven    _LIBCPP_ALWAYS_INLINE
157227825Stheraven    explicit __codecvt_utf8(size_t __refs, unsigned long _Maxcode,
158227825Stheraven                            codecvt_mode _Mode)
159227825Stheraven        : codecvt<char32_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
160227825Stheraven          _Mode_(_Mode) {}
161227825Stheravenprotected:
162227825Stheraven    virtual result
163227825Stheraven        do_out(state_type& __st,
164227825Stheraven               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
165227825Stheraven               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
166227825Stheraven    virtual result
167227825Stheraven        do_in(state_type& __st,
168227825Stheraven              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
169227825Stheraven              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
170227825Stheraven    virtual result
171227825Stheraven        do_unshift(state_type& __st,
172227825Stheraven                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
173227825Stheraven    virtual int do_encoding() const throw();
174227825Stheraven    virtual bool do_always_noconv() const throw();
175227825Stheraven    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
176227825Stheraven                          size_t __mx) const;
177227825Stheraven    virtual int do_max_length() const throw();
178227825Stheraven};
179227825Stheraven
180227825Stheraventemplate <class _Elem, unsigned long _Maxcode = 0x10ffff,
181227825Stheraven          codecvt_mode _Mode = (codecvt_mode)0>
182227825Stheravenclass _LIBCPP_VISIBLE codecvt_utf8
183227825Stheraven    : public __codecvt_utf8<_Elem>
184227825Stheraven{
185227825Stheravenpublic:
186227825Stheraven    _LIBCPP_ALWAYS_INLINE
187227825Stheraven    explicit codecvt_utf8(size_t __refs = 0)
188227825Stheraven        : __codecvt_utf8<_Elem>(__refs, _Maxcode, _Mode) {}
189227825Stheraven
190227825Stheraven    _LIBCPP_ALWAYS_INLINE
191227825Stheraven    ~codecvt_utf8() {}
192227825Stheraven};
193227825Stheraven
194227825Stheraven// codecvt_utf16
195227825Stheraven
196227825Stheraventemplate <class _Elem, bool _LittleEndian> class __codecvt_utf16;
197227825Stheraven
198227825Stheraventemplate <>
199227825Stheravenclass __codecvt_utf16<wchar_t, false>
200227825Stheraven    : public codecvt<wchar_t, char, mbstate_t>
201227825Stheraven{
202227825Stheraven    unsigned long _Maxcode_;
203227825Stheraven    codecvt_mode _Mode_;
204227825Stheravenpublic:
205227825Stheraven    typedef wchar_t   intern_type;
206227825Stheraven    typedef char      extern_type;
207227825Stheraven    typedef mbstate_t state_type;
208227825Stheraven
209227825Stheraven    _LIBCPP_ALWAYS_INLINE
210227825Stheraven    explicit __codecvt_utf16(size_t __refs, unsigned long _Maxcode,
211227825Stheraven                            codecvt_mode _Mode)
212227825Stheraven        : codecvt<wchar_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
213227825Stheraven          _Mode_(_Mode) {}
214227825Stheravenprotected:
215227825Stheraven    virtual result
216227825Stheraven        do_out(state_type& __st,
217227825Stheraven               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
218227825Stheraven               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
219227825Stheraven    virtual result
220227825Stheraven        do_in(state_type& __st,
221227825Stheraven              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
222227825Stheraven              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
223227825Stheraven    virtual result
224227825Stheraven        do_unshift(state_type& __st,
225227825Stheraven                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
226227825Stheraven    virtual int do_encoding() const throw();
227227825Stheraven    virtual bool do_always_noconv() const throw();
228227825Stheraven    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
229227825Stheraven                          size_t __mx) const;
230227825Stheraven    virtual int do_max_length() const throw();
231227825Stheraven};
232227825Stheraven
233227825Stheraventemplate <>
234227825Stheravenclass __codecvt_utf16<wchar_t, true>
235227825Stheraven    : public codecvt<wchar_t, char, mbstate_t>
236227825Stheraven{
237227825Stheraven    unsigned long _Maxcode_;
238227825Stheraven    codecvt_mode _Mode_;
239227825Stheravenpublic:
240227825Stheraven    typedef wchar_t   intern_type;
241227825Stheraven    typedef char      extern_type;
242227825Stheraven    typedef mbstate_t state_type;
243227825Stheraven
244227825Stheraven    _LIBCPP_ALWAYS_INLINE
245227825Stheraven    explicit __codecvt_utf16(size_t __refs, unsigned long _Maxcode,
246227825Stheraven                            codecvt_mode _Mode)
247227825Stheraven        : codecvt<wchar_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
248227825Stheraven          _Mode_(_Mode) {}
249227825Stheravenprotected:
250227825Stheraven    virtual result
251227825Stheraven        do_out(state_type& __st,
252227825Stheraven               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
253227825Stheraven               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
254227825Stheraven    virtual result
255227825Stheraven        do_in(state_type& __st,
256227825Stheraven              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
257227825Stheraven              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
258227825Stheraven    virtual result
259227825Stheraven        do_unshift(state_type& __st,
260227825Stheraven                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
261227825Stheraven    virtual int do_encoding() const throw();
262227825Stheraven    virtual bool do_always_noconv() const throw();
263227825Stheraven    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
264227825Stheraven                          size_t __mx) const;
265227825Stheraven    virtual int do_max_length() const throw();
266227825Stheraven};
267227825Stheraven
268227825Stheraventemplate <>
269227825Stheravenclass __codecvt_utf16<char16_t, false>
270227825Stheraven    : public codecvt<char16_t, char, mbstate_t>
271227825Stheraven{
272227825Stheraven    unsigned long _Maxcode_;
273227825Stheraven    codecvt_mode _Mode_;
274227825Stheravenpublic:
275227825Stheraven    typedef char16_t  intern_type;
276227825Stheraven    typedef char      extern_type;
277227825Stheraven    typedef mbstate_t state_type;
278227825Stheraven
279227825Stheraven    _LIBCPP_ALWAYS_INLINE
280227825Stheraven    explicit __codecvt_utf16(size_t __refs, unsigned long _Maxcode,
281227825Stheraven                            codecvt_mode _Mode)
282227825Stheraven        : codecvt<char16_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
283227825Stheraven          _Mode_(_Mode) {}
284227825Stheravenprotected:
285227825Stheraven    virtual result
286227825Stheraven        do_out(state_type& __st,
287227825Stheraven               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
288227825Stheraven               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
289227825Stheraven    virtual result
290227825Stheraven        do_in(state_type& __st,
291227825Stheraven              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
292227825Stheraven              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
293227825Stheraven    virtual result
294227825Stheraven        do_unshift(state_type& __st,
295227825Stheraven                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
296227825Stheraven    virtual int do_encoding() const throw();
297227825Stheraven    virtual bool do_always_noconv() const throw();
298227825Stheraven    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
299227825Stheraven                          size_t __mx) const;
300227825Stheraven    virtual int do_max_length() const throw();
301227825Stheraven};
302227825Stheraven
303227825Stheraventemplate <>
304227825Stheravenclass __codecvt_utf16<char16_t, true>
305227825Stheraven    : public codecvt<char16_t, char, mbstate_t>
306227825Stheraven{
307227825Stheraven    unsigned long _Maxcode_;
308227825Stheraven    codecvt_mode _Mode_;
309227825Stheravenpublic:
310227825Stheraven    typedef char16_t  intern_type;
311227825Stheraven    typedef char      extern_type;
312227825Stheraven    typedef mbstate_t state_type;
313227825Stheraven
314227825Stheraven    _LIBCPP_ALWAYS_INLINE
315227825Stheraven    explicit __codecvt_utf16(size_t __refs, unsigned long _Maxcode,
316227825Stheraven                            codecvt_mode _Mode)
317227825Stheraven        : codecvt<char16_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
318227825Stheraven          _Mode_(_Mode) {}
319227825Stheravenprotected:
320227825Stheraven    virtual result
321227825Stheraven        do_out(state_type& __st,
322227825Stheraven               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
323227825Stheraven               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
324227825Stheraven    virtual result
325227825Stheraven        do_in(state_type& __st,
326227825Stheraven              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
327227825Stheraven              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
328227825Stheraven    virtual result
329227825Stheraven        do_unshift(state_type& __st,
330227825Stheraven                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
331227825Stheraven    virtual int do_encoding() const throw();
332227825Stheraven    virtual bool do_always_noconv() const throw();
333227825Stheraven    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
334227825Stheraven                          size_t __mx) const;
335227825Stheraven    virtual int do_max_length() const throw();
336227825Stheraven};
337227825Stheraven
338227825Stheraventemplate <>
339227825Stheravenclass __codecvt_utf16<char32_t, false>
340227825Stheraven    : public codecvt<char32_t, char, mbstate_t>
341227825Stheraven{
342227825Stheraven    unsigned long _Maxcode_;
343227825Stheraven    codecvt_mode _Mode_;
344227825Stheravenpublic:
345227825Stheraven    typedef char32_t  intern_type;
346227825Stheraven    typedef char      extern_type;
347227825Stheraven    typedef mbstate_t state_type;
348227825Stheraven
349227825Stheraven    _LIBCPP_ALWAYS_INLINE
350227825Stheraven    explicit __codecvt_utf16(size_t __refs, unsigned long _Maxcode,
351227825Stheraven                            codecvt_mode _Mode)
352227825Stheraven        : codecvt<char32_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
353227825Stheraven          _Mode_(_Mode) {}
354227825Stheravenprotected:
355227825Stheraven    virtual result
356227825Stheraven        do_out(state_type& __st,
357227825Stheraven               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
358227825Stheraven               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
359227825Stheraven    virtual result
360227825Stheraven        do_in(state_type& __st,
361227825Stheraven              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
362227825Stheraven              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
363227825Stheraven    virtual result
364227825Stheraven        do_unshift(state_type& __st,
365227825Stheraven                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
366227825Stheraven    virtual int do_encoding() const throw();
367227825Stheraven    virtual bool do_always_noconv() const throw();
368227825Stheraven    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
369227825Stheraven                          size_t __mx) const;
370227825Stheraven    virtual int do_max_length() const throw();
371227825Stheraven};
372227825Stheraven
373227825Stheraventemplate <>
374227825Stheravenclass __codecvt_utf16<char32_t, true>
375227825Stheraven    : public codecvt<char32_t, char, mbstate_t>
376227825Stheraven{
377227825Stheraven    unsigned long _Maxcode_;
378227825Stheraven    codecvt_mode _Mode_;
379227825Stheravenpublic:
380227825Stheraven    typedef char32_t  intern_type;
381227825Stheraven    typedef char      extern_type;
382227825Stheraven    typedef mbstate_t state_type;
383227825Stheraven
384227825Stheraven    _LIBCPP_ALWAYS_INLINE
385227825Stheraven    explicit __codecvt_utf16(size_t __refs, unsigned long _Maxcode,
386227825Stheraven                            codecvt_mode _Mode)
387227825Stheraven        : codecvt<char32_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
388227825Stheraven          _Mode_(_Mode) {}
389227825Stheravenprotected:
390227825Stheraven    virtual result
391227825Stheraven        do_out(state_type& __st,
392227825Stheraven               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
393227825Stheraven               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
394227825Stheraven    virtual result
395227825Stheraven        do_in(state_type& __st,
396227825Stheraven              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
397227825Stheraven              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
398227825Stheraven    virtual result
399227825Stheraven        do_unshift(state_type& __st,
400227825Stheraven                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
401227825Stheraven    virtual int do_encoding() const throw();
402227825Stheraven    virtual bool do_always_noconv() const throw();
403227825Stheraven    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
404227825Stheraven                          size_t __mx) const;
405227825Stheraven    virtual int do_max_length() const throw();
406227825Stheraven};
407227825Stheraven
408227825Stheraventemplate <class _Elem, unsigned long _Maxcode = 0x10ffff,
409227825Stheraven          codecvt_mode _Mode = (codecvt_mode)0>
410227825Stheravenclass _LIBCPP_VISIBLE codecvt_utf16
411227825Stheraven    : public __codecvt_utf16<_Elem, _Mode & little_endian>
412227825Stheraven{
413227825Stheravenpublic:
414227825Stheraven    _LIBCPP_ALWAYS_INLINE
415227825Stheraven    explicit codecvt_utf16(size_t __refs = 0)
416227825Stheraven        : __codecvt_utf16<_Elem, _Mode & little_endian>(__refs, _Maxcode, _Mode) {}
417227825Stheraven
418227825Stheraven    _LIBCPP_ALWAYS_INLINE
419227825Stheraven    ~codecvt_utf16() {}
420227825Stheraven};
421227825Stheraven
422227825Stheraven// codecvt_utf8_utf16
423227825Stheraven
424227825Stheraventemplate <class _Elem> class __codecvt_utf8_utf16;
425227825Stheraven
426227825Stheraventemplate <>
427227825Stheravenclass __codecvt_utf8_utf16<wchar_t>
428227825Stheraven    : public codecvt<wchar_t, char, mbstate_t>
429227825Stheraven{
430227825Stheraven    unsigned long _Maxcode_;
431227825Stheraven    codecvt_mode _Mode_;
432227825Stheravenpublic:
433227825Stheraven    typedef wchar_t   intern_type;
434227825Stheraven    typedef char      extern_type;
435227825Stheraven    typedef mbstate_t state_type;
436227825Stheraven
437227825Stheraven    _LIBCPP_ALWAYS_INLINE
438227825Stheraven    explicit __codecvt_utf8_utf16(size_t __refs, unsigned long _Maxcode,
439227825Stheraven                            codecvt_mode _Mode)
440227825Stheraven        : codecvt<wchar_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
441227825Stheraven          _Mode_(_Mode) {}
442227825Stheravenprotected:
443227825Stheraven    virtual result
444227825Stheraven        do_out(state_type& __st,
445227825Stheraven               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
446227825Stheraven               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
447227825Stheraven    virtual result
448227825Stheraven        do_in(state_type& __st,
449227825Stheraven              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
450227825Stheraven              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
451227825Stheraven    virtual result
452227825Stheraven        do_unshift(state_type& __st,
453227825Stheraven                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
454227825Stheraven    virtual int do_encoding() const throw();
455227825Stheraven    virtual bool do_always_noconv() const throw();
456227825Stheraven    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
457227825Stheraven                          size_t __mx) const;
458227825Stheraven    virtual int do_max_length() const throw();
459227825Stheraven};
460227825Stheraven
461227825Stheraventemplate <>
462227825Stheravenclass __codecvt_utf8_utf16<char32_t>
463227825Stheraven    : public codecvt<char32_t, char, mbstate_t>
464227825Stheraven{
465227825Stheraven    unsigned long _Maxcode_;
466227825Stheraven    codecvt_mode _Mode_;
467227825Stheravenpublic:
468227825Stheraven    typedef char32_t  intern_type;
469227825Stheraven    typedef char      extern_type;
470227825Stheraven    typedef mbstate_t state_type;
471227825Stheraven
472227825Stheraven    _LIBCPP_ALWAYS_INLINE
473227825Stheraven    explicit __codecvt_utf8_utf16(size_t __refs, unsigned long _Maxcode,
474227825Stheraven                            codecvt_mode _Mode)
475227825Stheraven        : codecvt<char32_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
476227825Stheraven          _Mode_(_Mode) {}
477227825Stheravenprotected:
478227825Stheraven    virtual result
479227825Stheraven        do_out(state_type& __st,
480227825Stheraven               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
481227825Stheraven               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
482227825Stheraven    virtual result
483227825Stheraven        do_in(state_type& __st,
484227825Stheraven              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
485227825Stheraven              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
486227825Stheraven    virtual result
487227825Stheraven        do_unshift(state_type& __st,
488227825Stheraven                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
489227825Stheraven    virtual int do_encoding() const throw();
490227825Stheraven    virtual bool do_always_noconv() const throw();
491227825Stheraven    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
492227825Stheraven                          size_t __mx) const;
493227825Stheraven    virtual int do_max_length() const throw();
494227825Stheraven};
495227825Stheraven
496227825Stheraventemplate <>
497227825Stheravenclass __codecvt_utf8_utf16<char16_t>
498227825Stheraven    : public codecvt<char16_t, char, mbstate_t>
499227825Stheraven{
500227825Stheraven    unsigned long _Maxcode_;
501227825Stheraven    codecvt_mode _Mode_;
502227825Stheravenpublic:
503227825Stheraven    typedef char16_t  intern_type;
504227825Stheraven    typedef char      extern_type;
505227825Stheraven    typedef mbstate_t state_type;
506227825Stheraven
507227825Stheraven    _LIBCPP_ALWAYS_INLINE
508227825Stheraven    explicit __codecvt_utf8_utf16(size_t __refs, unsigned long _Maxcode,
509227825Stheraven                            codecvt_mode _Mode)
510227825Stheraven        : codecvt<char16_t, char, mbstate_t>(__refs), _Maxcode_(_Maxcode),
511227825Stheraven          _Mode_(_Mode) {}
512227825Stheravenprotected:
513227825Stheraven    virtual result
514227825Stheraven        do_out(state_type& __st,
515227825Stheraven               const intern_type* __frm, const intern_type* __frm_end, const intern_type*& __frm_nxt,
516227825Stheraven               extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
517227825Stheraven    virtual result
518227825Stheraven        do_in(state_type& __st,
519227825Stheraven              const extern_type* __frm, const extern_type* __frm_end, const extern_type*& __frm_nxt,
520227825Stheraven              intern_type* __to, intern_type* __to_end, intern_type*& __to_nxt) const;
521227825Stheraven    virtual result
522227825Stheraven        do_unshift(state_type& __st,
523227825Stheraven                   extern_type* __to, extern_type* __to_end, extern_type*& __to_nxt) const;
524227825Stheraven    virtual int do_encoding() const throw();
525227825Stheraven    virtual bool do_always_noconv() const throw();
526227825Stheraven    virtual int do_length(state_type&, const extern_type* __frm, const extern_type* __end,
527227825Stheraven                          size_t __mx) const;
528227825Stheraven    virtual int do_max_length() const throw();
529227825Stheraven};
530227825Stheraven
531227825Stheraventemplate <class _Elem, unsigned long _Maxcode = 0x10ffff,
532227825Stheraven          codecvt_mode _Mode = (codecvt_mode)0>
533227825Stheravenclass _LIBCPP_VISIBLE codecvt_utf8_utf16
534227825Stheraven    : public __codecvt_utf8_utf16<_Elem>
535227825Stheraven{
536227825Stheravenpublic:
537227825Stheraven    _LIBCPP_ALWAYS_INLINE
538227825Stheraven    explicit codecvt_utf8_utf16(size_t __refs = 0)
539227825Stheraven        : __codecvt_utf8_utf16<_Elem>(__refs, _Maxcode, _Mode) {}
540227825Stheraven
541227825Stheraven    _LIBCPP_ALWAYS_INLINE
542227825Stheraven    ~codecvt_utf8_utf16() {}
543227825Stheraven};
544227825Stheraven
545227825Stheraven_LIBCPP_END_NAMESPACE_STD
546227825Stheraven
547227825Stheraven#endif  // _LIBCPP_CODECVT
548