Managing negative deltas
[idzebra-moved-to-github.git] / index / kcompare.c
index 76e93f4..cb4ffc7 100644 (file)
@@ -4,7 +4,16 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: kcompare.c,v $
- * Revision 1.29  1999-06-30 09:08:23  adam
+ * Revision 1.32  1999-07-13 13:21:15  heikki
+ * Managing negative deltas
+ *
+ * Revision 1.31  1999/07/06 09:37:04  heikki
+ * Working on isamh - not ready yet.
+ *
+ * Revision 1.30  1999/06/30 15:07:23  heikki
+ * Adding isamh stuff
+ *
+ * Revision 1.29  1999/06/30 09:08:23  adam
  * Added coder to reset.
  *
  * Revision 1.28  1999/05/26 07:49:13  adam
@@ -216,18 +225,18 @@ void iscz1_encode_int (unsigned d, char **dst)
         *bp++ = d;
     else if (d <= 16383)
     {
-        *bp++ = 64 + (d>>8);
+        *bp++ = 64 | (d>>8);
        *bp++ = d & 255;
     }
     else if (d <= 4194303)
     {
-        *bp++ = 128 + (d>>16);
+        *bp++ = 128 | (d>>16);
         *bp++ = (d>>8) & 255;
         *bp++ = d & 255;
     }
     else
     {
-        *bp++ = 192 + (d>>24);
+        *bp++ = 192 | (d>>24);
         *bp++ = (d>>16) & 255;
         *bp++ = (d>>8) & 255;
         *bp++ = d & 255;
@@ -249,9 +258,13 @@ int iscz1_decode_int (unsigned char **src)
         c = (c << 8) + *(*src)++;
         return c;
     }
-    c = ((c & 63) << 8) + *(*src)++;
+    if (c&32) /* expand sign bit to high bits */
+       c = ((c | 63) << 8) + *(*src)++;
+    else
+       c = ((c & 63) << 8) + *(*src)++;
     c = (c << 8) + *(*src)++;
     c = (c << 8) + *(*src)++;
+    
     return c;
 }
 
@@ -335,6 +348,27 @@ ISAMS_M key_isams_m (Res res)
     return me;
 }
 
+ISAMH_M key_isamh_m (Res res)
+{
+    static ISAMH_M me = NULL;
+
+    if (me)
+        return me;
+
+    me = isamh_getmethod ();
+
+    me->compare_item = key_compare;
+
+    me->code_start = iscz1_code_start;
+    me->code_item = iscz1_code_item;
+    me->code_stop = iscz1_code_stop;
+    me->code_reset = iscz1_code_reset;
+
+    me->debug = atoi(res_get_def (res, "isamhDebug", "9"));
+
+    return me;
+}
+
 
 int key_SU_code (int ch, char *out)
 {