From 94ad502634fd97a08c4af0731eb3eddca13a3691 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Tue, 29 Oct 1996 14:02:45 +0000 Subject: [PATCH] Uses buffered read to speed up things. --- recctrl/rectext.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 52 insertions(+), 5 deletions(-) diff --git a/recctrl/rectext.c b/recctrl/rectext.c index 321e414..0dba645 100644 --- a/recctrl/rectext.c +++ b/recctrl/rectext.c @@ -4,7 +4,10 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: rectext.c,v $ - * Revision 1.1 1996-10-11 10:57:28 adam + * Revision 1.2 1996-10-29 14:02:45 adam + * Uses buffered read to speed up things. + * + * Revision 1.1 1996/10/11 10:57:28 adam * New module recctrl. Used to manage records (extract/retrieval). * * Revision 1.7 1996/01/17 14:57:55 adam @@ -36,39 +39,83 @@ #include #include -#include +#include #include "rectext.h" static void text_init (void) { } +struct buf_info { + struct recExtractCtrl *p; + char *buf; + int offset; + int max; +}; + +struct buf_info *buf_open (struct recExtractCtrl *p) +{ + struct buf_info *fi = xmalloc (sizeof(*fi)); + + fi->p = p; + fi->buf = xmalloc (4096); + fi->offset = 1; + fi->max = 1; + return fi; +} + +int buf_read (struct buf_info *fi, char *dst) +{ + if (fi->max <= 0) + return 0; + if (fi->offset >= fi->max) + { + fi->max = (*fi->p->readf)(fi->p->fh, fi->buf, 4096); + fi->offset = 0; + if (fi->max <= 0) + return 0; + } + *dst = fi->buf[(fi->offset)++]; + return 1; +} + +void buf_close (struct buf_info *fi) +{ + xfree (fi->buf); + xfree (fi); +} + static int text_extract (struct recExtractCtrl *p) { char w[256]; RecWord recWord; int r, seqno = 1; + struct buf_info *fi = buf_open (p); (*p->init)(&recWord); recWord.which = Word_String; do { int i = 0; - - r = (*p->readf)(p->fh, w, 1); + + r = buf_read (fi, w); while (r > 0 && i < 255 && isalnum(w[i])) { i++; - r = (*p->readf) (p->fh, w + i, 1); + r = buf_read (fi, w + i); } if (i) { + int j; + for (j = 0; jadd)(&recWord); } } while (r > 0); + buf_close (fi); return 0; } -- 1.7.10.4