From 614cde384b649a59922033c64db65409e45ab631 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Fri, 15 Dec 1995 12:36:52 +0000 Subject: [PATCH] Moved hash file information to union. Renamed commit files. --- bfile/cfile.c | 44 ++++++++++++++++++++++++-------------------- bfile/cfile.h | 18 +++++++++++++----- bfile/commit.c | 10 +++++++--- 3 files changed, 44 insertions(+), 28 deletions(-) diff --git a/bfile/cfile.c b/bfile/cfile.c index 57be833..a6390c2 100644 --- a/bfile/cfile.c +++ b/bfile/cfile.c @@ -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; ihead.hash_size; i++) + for (i = 0; ihead.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; ihead.hash_size; i++) + cf->parray = xmalloc (cf->head.u.hash.hash_size * sizeof(*cf->parray)); + for (i = 0; ihead.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; iparray[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]) diff --git a/bfile/cfile.h b/bfile/cfile.h index 07282ce..8a55788 100644 --- a/bfile/cfile.h +++ b/bfile/cfile.h @@ -4,7 +4,11 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: cfile.h,v $ - * Revision 1.4 1995-12-11 09:03:54 adam + * Revision 1.5 1995-12-15 12:36:52 adam + * Moved hash file information to union. + * Renamed commit files. + * + * Revision 1.4 1995/12/11 09:03:54 adam * New function: cf_unlink. * New member of commit file head: state (0) deleted, (1) hash file. * @@ -42,10 +46,14 @@ typedef struct CFile_struct { struct CFile_head { int state; - int hash_size; - int next_bucket; - int next_block; - int block_size; + union { + struct { + int hash_size; + int next_bucket; + int next_block; + int block_size; + } hash; + } u; } head; MFile block_mf; MFile hash_mf; diff --git a/bfile/commit.c b/bfile/commit.c index 0c9df27..8c77b80 100644 --- a/bfile/commit.c +++ b/bfile/commit.c @@ -4,7 +4,11 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: commit.c,v $ - * Revision 1.5 1995-12-12 15:57:55 adam + * Revision 1.6 1995-12-15 12:36:53 adam + * Moved hash file information to union. + * Renamed commit files. + * + * Revision 1.5 1995/12/12 15:57:55 adam * Implemented mf_unlink. cf_unlink uses mf_unlink. * * Revision 1.4 1995/12/11 09:03:55 adam @@ -54,9 +58,9 @@ void cf_commit (CFile cf) exit (1); } p = xmalloc (sizeof(*p)); - hash_bytes = cf->head.hash_size * sizeof(int); + hash_bytes = cf->head.u.hash.hash_size * sizeof(int); bucket_no = (hash_bytes+sizeof(cf->head))/HASH_BSIZE + 2; - for (; bucket_no < cf->head.next_bucket; bucket_no++) + for (; bucket_no < cf->head.u.hash.next_bucket; bucket_no++) { if (!mf_read (cf->hash_mf, bucket_no, 0, 0, p)) { -- 1.7.10.4