]> mj.ucw.cz Git - libucw.git/blobdiff - lib/ff-utf8.h
Use big_alloc().
[libucw.git] / lib / ff-utf8.h
index 296fb9d74d5dde203ca38779ba9c85dd46dedd2d..31510ff4411b5aceb85c9c921f20ff9d8f086474 100644 (file)
@@ -1,27 +1,30 @@
 /*
- *     Sherlock Library: Reading and writing of UTF-8 on Fastbuf Streams
+ *     UCW Library: Reading and writing of UTF-8 on Fastbuf Streams
  *
  *     (c) 2001--2004 Martin Mares <mj@ucw.cz>
+ *     (c) 2004 Robert Spalek <robert@ucw.cz>
  *
  *     This software may be freely distributed and used according to the terms
  *     of the GNU Lesser General Public License.
  */
 
-#ifndef _FF_UTF8_H
-#define _FF_UTF8_H
+#ifndef _UCW_FF_UTF8_H
+#define _UCW_FF_UTF8_H
 
 #include "lib/fastbuf.h"
 #include "lib/unicode.h"
 
 int bget_utf8_slow(struct fastbuf *b);
+int bget_utf8_32_slow(struct fastbuf *b);
 void bput_utf8_slow(struct fastbuf *b, uns u);
+void bput_utf8_32_slow(struct fastbuf *b, uns u);
 
 static inline int
 bget_utf8(struct fastbuf *b)
 {
   uns u;
 
-  if (b->bptr + 5 <= b->bstop)
+  if (bavailr(b) >= 3)
     {
       GET_UTF8(b->bptr, u);
       return u;
@@ -34,10 +37,34 @@ static inline void
 bput_utf8(struct fastbuf *b, uns u)
 {
   ASSERT(u < 65536);
-  if (b->bptr + 5 <= b->bufend)
+  if (bavailw(b) >= 3)
     PUT_UTF8(b->bptr, u);
   else
     bput_utf8_slow(b, u);
 }
 
+static inline int
+bget_utf8_32(struct fastbuf *b)
+{
+  uns u;
+
+  if (bavailr(b) >= 6)
+    {
+      GET_UTF8_32(b->bptr, u);
+      return u;
+    }
+  else
+    return bget_utf8_32_slow(b);
+}
+
+static inline void
+bput_utf8_32(struct fastbuf *b, uns u)
+{
+  ASSERT(u < (1U<<31));
+  if (bavailw(b) >= 6)
+    PUT_UTF8_32(b->bptr, u);
+  else
+    bput_utf8_32_slow(b, u);
+}
+
 #endif