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