]> mj.ucw.cz Git - libucw.git/commitdiff
Added bget_tagged_char().
authorMartin Mares <mj@ucw.cz>
Wed, 22 May 2002 16:33:47 +0000 (16:33 +0000)
committerMartin Mares <mj@ucw.cz>
Wed, 22 May 2002 16:33:47 +0000 (16:33 +0000)
lib/index.h

index 0585141245e440dd4b03e0dc75068956ee00abea..2623813f5dcd0940a15bd860bf8390f851e6d1dc 100644 (file)
@@ -4,6 +4,12 @@
  *     (c) 2001--2002 Martin Mares <mj@ucw.cz>
  */
 
+#ifndef _SHERLOCK_INDEX_H
+#define _SHERLOCK_INDEX_H
+
+#include "lib/fastbuf.h"
+#include "charset/unistream.h"
+
 /* Words */
 
 #define MAX_WORD_LEN           64
@@ -64,8 +70,7 @@ fp_hash(struct fingerprint *fp)
       p++;                                                     \
       if (u >= 0xb0)                                           \
         {                                                      \
-         if (u != 0xb0)                                        \
-            ASSERT(0);                                         \
+         ASSERT(u == 0xb0);                                    \
          u += 0x80020000;                                      \
         }                                                      \
       else if (u >= 0xa0)                                      \
@@ -80,6 +85,36 @@ fp_hash(struct fingerprint *fp)
     p++;                                                       \
 } while (0)
 
+static inline uns
+bget_tagged_char(struct fastbuf *f)
+{
+  uns u = bgetc(f);
+  if ((int)u < 0x80)
+    ;
+  else if (u < 0xc0)
+    {
+      if (u >= 0xb0)
+       {
+         ASSERT(u == 0xb0);
+         u += 0x80020000;
+       }
+      else if (u >= 0xa0)
+       {
+         uns v = bgetc(f);
+         ASSERT(v >= 0x80 && v <= 0xbf);
+         u = 0x80010000 + ((u & 0x0f) << 6) + (v & 0x3f);
+       }
+      else
+       u += 0x80000000;
+    }
+  else
+    {
+      bungetc(f);
+      u = bget_utf8(f);
+    }
+  return u;
+}
+
 /* Conversion of document age from seconds to our internal units */
 
 static inline int
@@ -102,3 +137,5 @@ convert_age(sh_time_t lastmod, sh_time_t reftime)
     return 247 + age;
   return 255;                          /* then just "infinite future" */
 }
+
+#endif