From a5a4e10abdb1f3ddcf2fd1e54692811a705e0c3d Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Thu, 11 Dec 2008 12:23:46 +0100 Subject: [PATCH] Annotations. Introduced define for CFile state. --- bfile/cfile.c | 12 +++++----- bfile/cfile.h | 68 ++++++++++++++++++++++++++++++++++---------------------- bfile/commit.c | 4 ++-- 3 files changed, 49 insertions(+), 35 deletions(-) diff --git a/bfile/cfile.c b/bfile/cfile.c index ab6efb9..003044b 100644 --- a/bfile/cfile.c +++ b/bfile/cfile.c @@ -26,7 +26,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "mfile.h" #include "cfile.h" -/* set to 1 if extra commit/shadow check is to be performed */ +/** \brief set to 1 if extra commit/shadow check is to be performed */ #define EXTRA_CHECK 0 static int write_head(CFile cf) @@ -131,7 +131,7 @@ CFile cf_open(MFile mf, MFile_area area, const char *fname, if (ret == 0 || !cf->head.state) { *firstp = 1; - cf->head.state = 1; + cf->head.state = CFILE_STATE_HASH; cf->head.block_size = block_size; cf->head.hash_size = 199; hash_bytes = cf->head.hash_size * sizeof(zint); @@ -163,7 +163,7 @@ CFile cf_open(MFile mf, MFile_area area, const char *fname, hash_bytes = cf->head.hash_size * sizeof(zint); assert(cf->head.next_bucket > 0); assert(cf->head.next_block > 0); - if (cf->head.state == 1) + if (cf->head.state == CFILE_STATE_HASH) cf->array = (zint *) xmalloc(hash_bytes); else cf->array = NULL; @@ -173,7 +173,7 @@ CFile cf_open(MFile mf, MFile_area area, const char *fname, return 0; } } - if (cf->head.state == 1) + if (cf->head.state == CFILE_STATE_HASH) { cf->parray = (struct CFile_hash_bucket **) xmalloc(cf->head.hash_size * sizeof(*cf->parray)); @@ -395,7 +395,7 @@ static int cf_moveto_flat(CFile cf) ZINT_FORMAT, cf->no_hits, cf->no_miss, cf->bucket_in_memory, cf->head.next_bucket - cf->head.first_bucket); - assert(cf->head.state == 1); + assert(cf->head.state == CFILE_STATE_HASH); if (flush_bucket(cf, -1)) return -1; assert(cf->bucket_in_memory == 0); @@ -422,7 +422,7 @@ static int cf_moveto_flat(CFile cf) cf->array = NULL; xfree(cf->parray); cf->parray = NULL; - cf->head.state = 2; + cf->head.state = CFILE_STATE_FLAT; cf->dirty = 1; return 0; } diff --git a/bfile/cfile.h b/bfile/cfile.h index e0f9567..f8e0985 100644 --- a/bfile/cfile.h +++ b/bfile/cfile.h @@ -26,15 +26,18 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA YAZ_BEGIN_CDECL +/** \brief number of blocks in hash bucket */ #define HASH_BUCKET 15 -struct CFile_ph_bucket { /* structure on disc */ - zint no[HASH_BUCKET]; /* block number in original file */ - zint vno[HASH_BUCKET]; /* block number in shadow file */ - zint this_bucket; /* this bucket number */ - zint next_bucket; /* next bucket number */ +/** \brief CFile hash structure on disc */ +struct CFile_ph_bucket { + zint no[HASH_BUCKET]; /**< block number in original file */ + zint vno[HASH_BUCKET];/**< block number in shadow file */ + zint this_bucket; /**< this bucket number */ + zint next_bucket; /**< next bucket number */ }; +/** \brief CFile hash structure info in memory */ struct CFile_hash_bucket { struct CFile_ph_bucket ph; int dirty; @@ -44,35 +47,46 @@ struct CFile_hash_bucket { #define HASH_BSIZE sizeof(struct CFile_ph_bucket) -#define CFILE_FLAT 1 +/** \brief state of CFile is a hash structure */ +#define CFILE_STATE_HASH 1 + +/** \brief state of CFile is a flat file file */ +#define CFILE_STATE_FLAT 2 + +/** \brief CFile file header */ +struct CFile_head { + int state; /**< CFILE_STATE_HASH, CFILE_STATE_FLAT, .. */ + zint next_block; /**< next free block / last block */ + int block_size; /**< mfile/bfile block size */ + int hash_size; /**< no of chains in hash table */ + zint first_bucket; /**< first hash bucket */ + zint next_bucket; /**< last hash bucket + 1 = first flat bucket */ + zint flat_bucket; /**< last flat bucket + 1 */ +}; +/** \brief All in-memory information per CFile */ typedef struct CFile_struct { - struct CFile_head { - int state; /* 1 = hash, 2 = flat */ - zint next_block; /* next free block / last block */ - int block_size; /* mfile/bfile block size */ - int hash_size; /* no of chains in hash table */ - zint first_bucket; /* first hash bucket */ - zint next_bucket; /* last hash bucket + 1 = first flat bucket */ - zint flat_bucket; /* last flat bucket + 1 */ - } head; - MFile block_mf; - MFile hash_mf; - zint *array; - struct CFile_hash_bucket **parray; - struct CFile_hash_bucket *bucket_lru_front, *bucket_lru_back; - int dirty; - zint bucket_in_memory; - zint max_bucket_in_memory; - char *iobuf; - MFile rmf; - int no_hits; - int no_miss; + struct CFile_head head; + + MFile block_mf; /**< block meta file */ + MFile hash_mf; /**< hash or index file (depending on state) */ + zint *array; /**< array for hash */ + struct CFile_hash_bucket **parray; /**< holds all hash bucket in memory */ + struct CFile_hash_bucket *bucket_lru_front; /**< LRU front for hash */ + struct CFile_hash_bucket *bucket_lru_back; /**< LRU back for hash */ + int dirty; /**< whether CFile is dirty / header must be rewritten */ + zint bucket_in_memory; /**< number of buckets in memory */ + zint max_bucket_in_memory; /**< max number of buckets in memory */ + char *iobuf; /**< data block .. of size block size */ + MFile rmf; /**< read meta file (original data / not dirty) */ + int no_hits; /**< number of bucket cache hits */ + int no_miss; /**< number of bucket cache misses */ Zebra_mutex mutex; } *CFile; int cf_close (CFile cf); + CFile cf_open (MFile mf, MFile_area area, const char *fname, int block_size, int wflag, int *firstp); int cf_read (CFile cf, zint no, int offset, int nbytes, void *buf); diff --git a/bfile/commit.c b/bfile/commit.c index 03f0b25..0faba91 100644 --- a/bfile/commit.c +++ b/bfile/commit.c @@ -261,9 +261,9 @@ int cf_commit(CFile cf) return -1; } yaz_log(log_level, "cf_commit: state=%d", cf->head.state); - if (cf->head.state == 1) + if (cf->head.state == CFILE_STATE_HASH) return cf_commit_hash(cf); - else if (cf->head.state == 2) + else if (cf->head.state == CFILE_STATE_FLAT) return cf_commit_flat(cf); else { -- 1.7.10.4