Moved hash file information to union.
[idzebra-moved-to-github.git] / bfile / cfile.c
index 57be833..a6390c2 100644 (file)
@@ -4,7 +4,11 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: cfile.c,v $
- * Revision 1.7  1995-12-15 10:35:07  adam
+ * Revision 1.8  1995-12-15 12:36:52  adam
+ * Moved hash file information to union.
+ * Renamed commit files.
+ *
+ * Revision 1.7  1995/12/15  10:35:07  adam
  * Changed names of commit files.
  *
  * Revision 1.6  1995/12/11  09:03:53  adam
@@ -38,7 +42,7 @@
 
 static int write_head (CFile cf)
 {
-    int left = cf->head.hash_size * sizeof(int);
+    int left = cf->head.u.hash.hash_size * sizeof(int);
     int bno = 1;
     const char *tab = (char*) cf->array;
 
@@ -55,7 +59,7 @@ static int write_head (CFile cf)
 
 static int read_head (CFile cf)
 {
-    int left = cf->head.hash_size * sizeof(int);
+    int left = cf->head.u.hash.hash_size * sizeof(int);
     int bno = 1;
     char *tab = (char*) cf->array;
 
@@ -98,16 +102,16 @@ CFile cf_open (MFile mf, MFile_area area, const char *fname,
     {
         *firstp = 1;
         cf->head.state = 1;
-        cf->head.block_size = block_size;
-        cf->head.hash_size = 401;
-        hash_bytes = cf->head.hash_size * sizeof(int);
-        cf->head.next_bucket =
+        cf->head.u.hash.block_size = block_size;
+        cf->head.u.hash.hash_size = 401;
+        hash_bytes = cf->head.u.hash.hash_size * sizeof(int);
+        cf->head.u.hash.next_bucket =
             (hash_bytes+sizeof(cf->head))/HASH_BSIZE + 2;
-        cf->head.next_block = 1;
+        cf->head.u.hash.next_block = 1;
         if (wflag)
             mf_write (cf->hash_mf, 0, 0, sizeof(cf->head), &cf->head);
         cf->array = xmalloc (hash_bytes);
-        for (i = 0; i<cf->head.hash_size; i++)
+        for (i = 0; i<cf->head.u.hash.hash_size; i++)
             cf->array[i] = 0;
         if (wflag)
             write_head (cf);
@@ -115,28 +119,28 @@ CFile cf_open (MFile mf, MFile_area area, const char *fname,
     else
     {
         *firstp = 0;
-        assert (cf->head.block_size == block_size);
-        assert (cf->head.hash_size > 2 && cf->head.hash_size < 200000);
-        hash_bytes = cf->head.hash_size * sizeof(int);
-        assert (cf->head.next_bucket > 0);
+        assert (cf->head.u.hash.block_size == block_size);
+        assert (cf->head.u.hash.hash_size > 2);
+        hash_bytes = cf->head.u.hash.hash_size * sizeof(int);
+        assert (cf->head.u.hash.next_bucket > 0);
         cf->array = xmalloc (hash_bytes);
         read_head (cf);
     }
-    cf->parray = xmalloc (cf->head.hash_size * sizeof(*cf->parray));
-    for (i = 0; i<cf->head.hash_size; i++)
+    cf->parray = xmalloc (cf->head.u.hash.hash_size * sizeof(*cf->parray));
+    for (i = 0; i<cf->head.u.hash.hash_size; i++)
         cf->parray[i] = NULL;
     cf->bucket_lru_front = cf->bucket_lru_back = NULL;
     cf->bucket_in_memory = 0;
     cf->max_bucket_in_memory = 400;
     cf->dirty = 0;
-    cf->iobuf = xmalloc (cf->head.block_size);
-    memset (cf->iobuf, 0, cf->head.block_size);
+    cf->iobuf = xmalloc (cf->head.u.hash.block_size);
+    memset (cf->iobuf, 0, cf->head.u.hash.block_size);
     return cf;
 }
 
 static int cf_hash (CFile cf, int no)
 {
-    return (no>>3) % cf->head.hash_size;
+    return (no>>3) % cf->head.u.hash.hash_size;
 }
 
 static void release_bucket (CFile cf, struct CFile_hash_bucket *p)
@@ -224,7 +228,7 @@ static struct CFile_hash_bucket *new_bucket (CFile cf, int *block_no, int hno)
     struct CFile_hash_bucket *p;
     int i;
 
-    *block_no = cf->head.next_bucket++;
+    *block_no = cf->head.u.hash.next_bucket++;
     p = alloc_bucket (cf, *block_no, hno);
 
     for (i = 0; i<HASH_BUCKET; i++)
@@ -273,7 +277,7 @@ int cf_new (CFile cf, int no)
     struct CFile_hash_bucket *hbprev = NULL, *hb = cf->parray[hno];
     int *bucketpp = &cf->array[hno];
     int i;
-    int vno = (cf->head.next_block)++;
+    int vno = (cf->head.u.hash.next_block)++;
     
     for (hb = cf->parray[hno]; hb; hb = hb->h_next)
         if (!hb->ph.vno[HASH_BUCKET-1])