Added better compression.
authorAdam Dickmeiss <adam@indexdata.dk>
Wed, 11 Dec 1996 12:08:00 +0000 (12:08 +0000)
committerAdam Dickmeiss <adam@indexdata.dk>
Wed, 11 Dec 1996 12:08:00 +0000 (12:08 +0000)
index/kcompare.c
index/zserver.c

index 2d7e720..d592e1d 100644 (file)
@@ -4,7 +4,10 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: kcompare.c,v $
- * Revision 1.18  1996-10-29 14:09:44  adam
+ * Revision 1.19  1996-12-11 12:08:00  adam
+ * Added better compression.
+ *
+ * Revision 1.18  1996/10/29 14:09:44  adam
  * Use of cisam system - enabled if setting isamc is 1.
  *
  * Revision 1.17  1996/06/04 10:18:58  adam
@@ -129,24 +132,24 @@ int key_qsort_compare (const void *p1, const void *p2)
     return cp1[l] - cp2[l];
 }
 
-struct iscz_code_info {
+struct iscz1_code_info {
     struct it_key key;
 };
 
-static void *iscz_code_start (int mode)
+static void *iscz1_code_start (int mode)
 {
-    struct iscz_code_info *p = xmalloc (sizeof(*p));
+    struct iscz1_code_info *p = xmalloc (sizeof(*p));
     p->key.sysno = 0;
     p->key.seqno = 0;
     return p;
 }
 
-static void iscz_code_stop (int mode, void *p)
+static void iscz1_code_stop (int mode, void *p)
 {
     xfree (p);
 }
 
-void iscz_encode_int (unsigned d, char **dst)
+void iscz1_encode_int (unsigned d, char **dst)
 {
     unsigned char *bp = (unsigned char*) *dst;
 
@@ -173,7 +176,7 @@ void iscz_encode_int (unsigned d, char **dst)
     *dst = (char *) bp;
 }
 
-int isxz_decode_int (unsigned char **src)
+int iscz1_decode_int (unsigned char **src)
 {
     unsigned c = *(*src)++;
     switch (c & 192)
@@ -192,10 +195,49 @@ int isxz_decode_int (unsigned char **src)
     c = (c << 8) + *(*src)++;
     return c;
 }
+#if 1
+static void iscz1_code_item (int mode, void *vp, char **dst, char **src)
+{
+    struct iscz1_code_info *p = vp;
+    struct it_key tkey;
+    int d;
 
-static void iscz_code_item (int mode, void *vp, char **dst, char **src)
+    if (mode == ISAMC_ENCODE)
+    {
+        memcpy (&tkey, *src, sizeof(struct it_key));
+        d = tkey.sysno - p->key.sysno;
+        if (d)
+        {
+            iscz1_encode_int (2*tkey.seqno + 1, dst);
+            iscz1_encode_int (d, dst);
+            p->key.sysno += d;
+            p->key.seqno = tkey.seqno;
+        }
+        else
+        {
+            iscz1_encode_int (2*(tkey.seqno - p->key.seqno), dst);
+            p->key.seqno = tkey.seqno;
+        }
+        (*src) += sizeof(struct it_key);
+    }
+    else
+    {
+        d = iscz1_decode_int ((unsigned char **) src);
+        if (d & 1)
+        {
+            p->key.seqno = d>>1;
+            p->key.sysno += iscz1_decode_int ((unsigned char **) src);
+        }
+        else
+            p->key.seqno += d>>1;
+        memcpy (*dst, &p->key, sizeof(struct it_key));
+        (*dst) += sizeof(struct it_key);
+    }
+}
+#else
+static void iscz1_code_item (int mode, void *vp, char **dst, char **src)
 {
-    struct iscz_code_info *p = vp;
+    struct iscz1_code_info *p = vp;
     struct it_key tkey;
     int d;
 
@@ -203,30 +245,31 @@ static void iscz_code_item (int mode, void *vp, char **dst, char **src)
     {
         memcpy (&tkey, *src, sizeof(struct it_key));
         d = tkey.sysno - p->key.sysno;
-        iscz_encode_int (d, dst);
+        iscz1_encode_int (d, dst);
         if (d)
         {
             p->key.sysno = tkey.sysno;
             p->key.seqno = 0;
         }
-        iscz_encode_int (tkey.seqno - p->key.seqno, dst);
+        iscz1_encode_int (tkey.seqno - p->key.seqno, dst);
         p->key.seqno = tkey.seqno;
         (*src) += sizeof(struct it_key);
     }
     else
     {
-        d = isxz_decode_int ((unsigned char **) src);
+        d = iscz1_decode_int ((unsigned char **) src);
         if (d)
         {
             p->key.sysno += d;
             p->key.seqno = 0;
         }
-        d = isxz_decode_int ((unsigned char **) src);
+        d = iscz1_decode_int ((unsigned char **) src);
         p->key.seqno += d;
         memcpy (*dst, &p->key, sizeof(struct it_key));
         (*dst) += sizeof(struct it_key);
     }
 }
+#endif
 
 ISAMC_M key_isamc_m (void)
 {
@@ -239,9 +282,9 @@ ISAMC_M key_isamc_m (void)
 
     me->compare_item = key_compare;
 
-    me->code_start = iscz_code_start;
-    me->code_item = iscz_code_item;
-    me->code_stop = iscz_code_stop;
+    me->code_start = iscz1_code_start;
+    me->code_item = iscz1_code_item;
+    me->code_stop = iscz1_code_stop;
 
     me->debug = atoi(res_get_def (common_resource, "isamcDebug", "0"));
 
index 3e38dad..61df429 100644 (file)
@@ -4,7 +4,10 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: zserver.c,v $
- * Revision 1.43  1996-11-15 15:03:58  adam
+ * Revision 1.44  1996-12-11 12:08:01  adam
+ * Added better compression.
+ *
+ * Revision 1.43  1996/11/15 15:03:58  adam
  * Logging of execution speed by using the times(2) call.
  *
  * Revision 1.42  1996/11/08  11:10:36  adam
 #include <recctrl.h>
 #include <dmalloc.h>
 
-#ifdef __LINUX__
+#ifdef __linux__
 #define USE_TIMES 1
 #endif