]> mj.ucw.cz Git - libucw.git/blob - ucw/ff-unicode.h
Libucw: A test for mmap fastbufs.
[libucw.git] / ucw / ff-unicode.h
1 /*
2  *      UCW Library: Reading and writing of UTF-8 and UTF-16 on Fastbuf Streams
3  *
4  *      (c) 2001--2004 Martin Mares <mj@ucw.cz>
5  *      (c) 2004 Robert Spalek <robert@ucw.cz>
6  *      (c) 2007--2008 Pavel Charvat <pchar@ucw.cz>
7  *
8  *      This software may be freely distributed and used according to the terms
9  *      of the GNU Lesser General Public License.
10  */
11
12 #ifndef _UCW_FF_UNICODE_H
13 #define _UCW_FF_UNICODE_H
14
15 #include "ucw/fastbuf.h"
16 #include "ucw/unicode.h"
17
18 /*** UTF-8 ***/
19
20 int bget_utf8_slow(struct fastbuf *b, uns repl);
21 int bget_utf8_32_slow(struct fastbuf *b, uns repl);
22 void bput_utf8_slow(struct fastbuf *b, uns u);
23 void bput_utf8_32_slow(struct fastbuf *b, uns u);
24
25 static inline int
26 bget_utf8_repl(struct fastbuf *b, uns repl)
27 {
28   uns u;
29   if (bavailr(b) >= 3)
30     {
31       b->bptr = utf8_get_repl(b->bptr, &u, repl);
32       return u;
33     }
34   else
35     return bget_utf8_slow(b, repl);
36 }
37
38 static inline int
39 bget_utf8_32_repl(struct fastbuf *b, uns repl)
40 {
41   uns u;
42   if (bavailr(b) >= 6)
43     {
44       b->bptr = utf8_32_get_repl(b->bptr, &u, repl);
45       return u;
46     }
47   else
48     return bget_utf8_32_slow(b, repl);
49 }
50
51 static inline int
52 bget_utf8(struct fastbuf *b)
53 {
54   return bget_utf8_repl(b, UNI_REPLACEMENT);
55 }
56
57 static inline int
58 bget_utf8_32(struct fastbuf *b)
59 {
60   return bget_utf8_32_repl(b, UNI_REPLACEMENT);
61 }
62
63 static inline void
64 bput_utf8(struct fastbuf *b, uns u)
65 {
66   if (bavailw(b) >= 3)
67     b->bptr = utf8_put(b->bptr, u);
68   else
69     bput_utf8_slow(b, u);
70 }
71
72 static inline void
73 bput_utf8_32(struct fastbuf *b, uns u)
74 {
75   if (bavailw(b) >= 6)
76     b->bptr = utf8_32_put(b->bptr, u);
77   else
78     bput_utf8_32_slow(b, u);
79 }
80
81 /*** UTF-16 ***/
82
83 int bget_utf16_be_slow(struct fastbuf *b, uns repl);
84 int bget_utf16_le_slow(struct fastbuf *b, uns repl);
85 void bput_utf16_be_slow(struct fastbuf *b, uns u);
86 void bput_utf16_le_slow(struct fastbuf *b, uns u);
87
88 static inline int
89 bget_utf16_be_repl(struct fastbuf *b, uns repl)
90 {
91   uns u;
92   if (bavailr(b) >= 4)
93     {
94       b->bptr = utf16_be_get_repl(b->bptr, &u, repl);
95       return u;
96     }
97   else
98     return bget_utf16_be_slow(b, repl);
99 }
100
101 static inline int
102 bget_utf16_le_repl(struct fastbuf *b, uns repl)
103 {
104   uns u;
105   if (bavailr(b) >= 4)
106     {
107       b->bptr = utf16_le_get_repl(b->bptr, &u, repl);
108       return u;
109     }
110   else
111     return bget_utf16_le_slow(b, repl);
112 }
113
114 static inline int
115 bget_utf16_be(struct fastbuf *b)
116 {
117   return bget_utf16_be_repl(b, UNI_REPLACEMENT);
118 }
119
120 static inline int
121 bget_utf16_le(struct fastbuf *b)
122 {
123   return bget_utf16_le_repl(b, UNI_REPLACEMENT);
124 }
125
126 static inline void
127 bput_utf16_be(struct fastbuf *b, uns u)
128 {
129   if (bavailw(b) >= 4)
130     b->bptr = utf16_be_put(b->bptr, u);
131   else
132     bput_utf16_be_slow(b, u);
133 }
134
135 static inline void
136 bput_utf16_lbe(struct fastbuf *b, uns u)
137 {
138   if (bavailw(b) >= 4)
139     b->bptr = utf16_le_put(b->bptr, u);
140   else
141     bput_utf16_le_slow(b, u);
142 }
143
144 #endif