xref: /haiku/headers/posix/uchar.h (revision 445d4fd926c569e7b9ae28017da86280aaecbae2)
1 /*
2  * Copyright 2018-2020 Haiku, Inc. All Right Reserved
3  * Distributed under the terms of MIT license.
4  */
5 #ifndef _UCHAR_H
6 #define _UCHAR_H
7 
8 
9 #include <stdint.h>
10 #include <wchar.h>
11 
12 
13 #ifdef __cplusplus
14 extern "C" {
15 #endif
16 
17 
18 typedef uint_least32_t char32_t;
19 typedef uint_least16_t char16_t;
20 
21 
22 #define __STD_UTF_32__ 1
23 #define __STD_UTF_16__ 1
24 
25 
26 // TODO implement mbrtoc16
27 
28 
29 static __inline size_t
30 c16rtomb(char *dest, char32_t wc, mbstate_t *mbState)
31 {
32 	wchar_t tmp = (wchar_t)wc;
33 	return wcrtomb(dest, tmp, mbState);
34 }
35 
36 
37 static __inline size_t
38 mbrtoc32(char32_t *dest, const char *src, size_t srcLength, mbstate_t *mbState)
39 {
40 	return mbrtowc((wchar_t*)dest, src, srcLength, mbState);
41 }
42 
43 
44 static __inline size_t
45 c32rtomb(char *dest, char32_t wc, mbstate_t *mbState)
46 {
47 	return wcrtomb(dest, (wchar_t)wc, mbState);
48 }
49 
50 
51 #ifdef __cplusplus
52 }
53 #endif
54 #endif /* _UCHAR_H */
55