From a69fc6623e847e925bc3f723d2e4a31d00d5650e Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Wed, 6 Dec 1995 13:58:26 +0000 Subject: [PATCH] Improved flushing of records - all flushes except the last one don't write the last accessed. Also flush takes place if record info occupy more than about 256k. --- index/recindex.c | 38 +++++++++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 7 deletions(-) diff --git a/index/recindex.c b/index/recindex.c index 6f06cd5..893fa05 100644 --- a/index/recindex.c +++ b/index/recindex.c @@ -4,7 +4,12 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: recindex.c,v $ - * Revision 1.10 1995-12-06 12:41:24 adam + * Revision 1.11 1995-12-06 13:58:26 adam + * Improved flushing of records - all flushes except the last one + * don't write the last accessed. Also flush takes place if record + * info occupy more than about 256k. + * + * Revision 1.10 1995/12/06 12:41:24 adam * New command 'stat' for the index program. * Filenames can be read from stdin by specifying '-'. * Bug fix/enhancement of the transformation from terms to regular @@ -300,10 +305,13 @@ Records rec_open (int rw) return p; } -static void rec_cache_flush (Records p) +static void rec_cache_flush (Records p, int saveCount) { - int i; - for (i = 0; icache_cur; i++) + int i, j; + + if (saveCount >= p->cache_cur) + saveCount = 0; + for (i = 0; icache_cur - saveCount; i++) { struct record_cache_entry *e = p->record_cache + i; switch (e->flag) @@ -322,7 +330,10 @@ static void rec_cache_flush (Records p) } rec_rm (&e->rec); } - p->cache_cur = 0; + for (j = 0; jrecord_cache+j, p->record_cache+i, + sizeof(*p->record_cache)); + p->cache_cur = saveCount; } static Record *rec_cache_lookup (Records p, int sysno, @@ -347,7 +358,20 @@ static void rec_cache_insert (Records p, Record rec, enum recordCacheFlag flag) struct record_cache_entry *e; if (p->cache_cur == p->cache_max) - rec_cache_flush (p); + rec_cache_flush (p, 1); + else if (p->cache_cur > 2) + { + int i, j; + int used = 0; + for (i = 0; icache_cur; i++) + { + Record r = (p->record_cache + i)->rec; + for (j = 0; jsize[j]; + } + if (used > 256000) + rec_cache_flush (p, 1); + } assert (p->cache_cur < p->cache_max); e = p->record_cache + (p->cache_cur)++; @@ -362,7 +386,7 @@ void rec_close (Records *pp) assert (p); - rec_cache_flush (p); + rec_cache_flush (p, 0); xfree (p->record_cache); if (p->rw) -- 1.7.10.4