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