X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fzinfo.c;h=f2ae6c85564e9e9c5f9a8026730bba69fdac7a73;hb=7cf4e149027f602723f729b8a3b8601833232021;hp=4f348671dd8ddd54e4bb52bea5620f94b8d02331;hpb=bad279c5dd1ae783ef9393775f0483cc3228cdbb;p=idzebra-moved-to-github.git diff --git a/index/zinfo.c b/index/zinfo.c index 4f34867..f2ae6c8 100644 --- a/index/zinfo.c +++ b/index/zinfo.c @@ -4,7 +4,13 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: zinfo.c,v $ - * Revision 1.1 1996-05-13 14:23:07 adam + * Revision 1.3 1996-05-22 08:21:59 adam + * Added public ZebDatabaseInfo structure. + * + * Revision 1.2 1996/05/14 06:16:41 adam + * Compact use/set bytes used in search service. + * + * Revision 1.1 1996/05/13 14:23:07 adam * Work on compaction of set/use bytes in dictionary. * */ @@ -25,36 +31,37 @@ struct zebSUInfoB { struct zebSUInfoB *next; }; -struct zebDatabaseInfo { +struct zebDatabaseInfoB { struct zebSUInfoB *SUInfo; char *databaseName; int sysno; int readFlag; - struct zebDatabaseInfo *next; + int dirty; + struct zebDatabaseInfo info; + struct zebDatabaseInfoB *next; }; struct zebTargetInfo { int dictNum; int dirty; Records records; - struct zebDatabaseInfo *databaseInfo; - struct zebDatabaseInfo *curDatabaseInfo; + struct zebDatabaseInfoB *databaseInfo; + struct zebDatabaseInfoB *curDatabaseInfo; }; void zebTargetInfo_close (ZebTargetInfo *zti, int writeFlag) { - struct zebDatabaseInfo *zdi, *zdi1; + struct zebDatabaseInfoB *zdi, *zdi1; if (writeFlag) { - Record grec; char p0[4096], *p = p0; memcpy (p, &zti->dictNum, sizeof(zti->dictNum)); p += sizeof(zti->dictNum); for (zdi = zti->databaseInfo; zdi; zdi=zdi->next) { - if (zdi->readFlag || !zdi->sysno) + if (zdi->dirty) { char q0[4096], *q = q0; struct zebSUInfoB *zsui; @@ -71,6 +78,8 @@ void zebTargetInfo_close (ZebTargetInfo *zti, int writeFlag) assert (drec); for (zsui = zdi->SUInfo; zsui; zsui=zsui->next) no++; + memcpy (q, &zdi->info, sizeof(zdi->info)); + q += sizeof(zdi->info); memcpy (q, &no, sizeof(no)); q += sizeof(no); for (zsui = zdi->SUInfo; zsui; zsui=zsui->next) @@ -89,13 +98,18 @@ void zebTargetInfo_close (ZebTargetInfo *zti, int writeFlag) memcpy (p, &zdi->sysno, sizeof(zdi->sysno)); p += sizeof(zdi->sysno); } - *p = '\0'; - grec = rec_get (zti->records, 1); - xfree (grec->info[0]); - grec->size[0] = p-p0; - grec->info[0] = xmalloc (grec->size[0]); - memcpy (grec->info[0], p0, grec->size[0]); - rec_put (zti->records, &grec); + *p++ = '\0'; + if (zti->dirty) + { + Record grec = rec_get (zti->records, 1); + + assert (grec); + xfree (grec->info[0]); + grec->size[0] = p-p0; + grec->info[0] = xmalloc (grec->size[0]); + memcpy (grec->info[0], p0, grec->size[0]); + rec_put (zti->records, &grec); + } } for (zdi = zti->databaseInfo; zdi; zdi = zdi1) { @@ -117,7 +131,7 @@ ZebTargetInfo *zebTargetInfo_open (Records records, int writeFlag) { Record rec; ZebTargetInfo *zti; - struct zebDatabaseInfo **zdi; + struct zebDatabaseInfoB **zdi; zti = xmalloc (sizeof(*zti)); zti->dirty = 0; @@ -144,6 +158,7 @@ ZebTargetInfo *zebTargetInfo_open (Records records, int writeFlag) memcpy (&(*zdi)->sysno, p, sizeof((*zdi)->sysno)); p += sizeof((*zdi)->sysno); (*zdi)->readFlag = 1; + (*zdi)->dirty = 0; zdi = &(*zdi)->next; } assert (p - rec->info[0] == rec->size[0]-1); @@ -157,6 +172,7 @@ ZebTargetInfo *zebTargetInfo_open (Records records, int writeFlag) rec->info[0] = xmalloc (1+sizeof(zti->dictNum)); memcpy (rec->info[0], &zti->dictNum, sizeof(zti->dictNum)); rec->info[0][sizeof(zti->dictNum)] = '\0'; + rec->size[0] = sizeof(zti->dictNum)+1; rec_put (records, &rec); } } @@ -166,7 +182,7 @@ ZebTargetInfo *zebTargetInfo_open (Records records, int writeFlag) } static void zebTargetInfo_readDatabase (ZebTargetInfo *zti, - struct zebDatabaseInfo *zdi) + struct zebDatabaseInfoB *zdi) { const char *p; struct zebSUInfoB **zsuip = &zdi->SUInfo; @@ -176,6 +192,8 @@ static void zebTargetInfo_readDatabase (ZebTargetInfo *zti, rec = rec_get (zti->records, zdi->sysno); assert (rec); p = rec->info[0]; + memcpy (&zdi->info, p, sizeof(zdi->info)); + p += sizeof(zdi->info); memcpy (&no, p, sizeof(no)); p += sizeof(no); for (i = 0; icurDatabaseInfo && @@ -213,7 +231,7 @@ int zebTargetInfo_curDatabase (ZebTargetInfo *zti, const char *database) int zebTargetInfo_newDatabase (ZebTargetInfo *zti, const char *database) { - struct zebDatabaseInfo *zdi; + struct zebDatabaseInfoB *zdi; assert (zti); for (zdi = zti->databaseInfo; zdi; zdi=zdi->next) @@ -230,6 +248,8 @@ int zebTargetInfo_newDatabase (ZebTargetInfo *zti, const char *database) zdi->readFlag = 0; zdi->databaseName = xstrdup (database); zdi->SUInfo = NULL; + zdi->dirty = 1; + zti->dirty = 1; zti->curDatabaseInfo = zdi; return 0; } @@ -256,8 +276,25 @@ int zebTargetInfo_addSU (ZebTargetInfo *zti, int set, int use) zsui = xmalloc (sizeof(*zsui)); zsui->next = zti->curDatabaseInfo->SUInfo; zti->curDatabaseInfo->SUInfo = zsui; + zti->curDatabaseInfo->dirty = 1; + zti->dirty = 1; zsui->info.set = set; zsui->info.use = use; zsui->info.ordinal = (zti->dictNum)++; return zsui->info.ordinal; } + +ZebDatabaseInfo *zebTargetInfo_getDB (ZebTargetInfo *zti) +{ + assert (zti->curDatabaseInfo); + + return &zti->curDatabaseInfo->info; +} + +void zebTargetInfo_setDB (ZebTargetInfo *zti, ZebDatabaseInfo *zdi) +{ + assert (zti->curDatabaseInfo); + + zti->curDatabaseInfo->dirty = 1; + memcpy (&zti->curDatabaseInfo->info, zdi, sizeof(*zdi)); +}