X-Git-Url: http://git.indexdata.com/?p=yazpp-moved-to-github.git;a=blobdiff_plain;f=src%2Fyaz-z-cache.cpp;fp=src%2Fyaz-z-cache.cpp;h=90c3c4b858a050de4c10bffb2bb9aa81c72eba7a;hp=366d19bbf411535b666811386b92743af0c1e9fa;hb=7411ed6df7fc0b535f83503f73d70e80f390e295;hpb=75f7c460d6d10961f3d2ed841b757d6d6b7725d7 diff --git a/src/yaz-z-cache.cpp b/src/yaz-z-cache.cpp index 366d19b..90c3c4b 100644 --- a/src/yaz-z-cache.cpp +++ b/src/yaz-z-cache.cpp @@ -2,7 +2,7 @@ * Copyright (c) 2002-2004, Index Data. * See the file LICENSE for details. * - * $Id: yaz-z-cache.cpp,v 1.13 2005-06-08 13:28:06 adam Exp $ + * $Id: yaz-z-cache.cpp,v 1.14 2005-06-25 15:53:19 adam Exp $ */ #include @@ -56,11 +56,11 @@ void RecordCache::copy_searchRequest(Z_SearchRequest *sr) int v = z_SearchRequest (encode, &sr, 1, 0); if (v) { - int len; - char *buf = odr_getbuf(encode, &len, 0); - odr_setbuf(decode, buf, len, 0); - z_SearchRequest(decode, &m_searchRequest, 1, 0); - nmem_transfer(m_mem, decode->mem); + int len; + char *buf = odr_getbuf(encode, &len, 0); + odr_setbuf(decode, buf, len, 0); + z_SearchRequest(decode, &m_searchRequest, 1, 0); + nmem_transfer(m_mem, decode->mem); } odr_destroy(encode); odr_destroy(decode); @@ -76,36 +76,36 @@ void RecordCache::copy_presentRequest(Z_PresentRequest *pr) int v = z_PresentRequest (encode, &pr, 1, 0); if (v) { - int len; - char *buf = odr_getbuf(encode, &len, 0); - odr_setbuf(decode, buf, len, 0); - z_PresentRequest(decode, &m_presentRequest, 1, 0); - nmem_transfer(m_mem, decode->mem); + int len; + char *buf = odr_getbuf(encode, &len, 0); + odr_setbuf(decode, buf, len, 0); + z_PresentRequest(decode, &m_presentRequest, 1, 0); + nmem_transfer(m_mem, decode->mem); } odr_destroy(encode); odr_destroy(decode); } void RecordCache::add (ODR o, Z_NamePlusRecordList *npr, int start, - int hits) + int hits) { if (nmem_total(m_mem) > m_max_size) - return; + return; // Build appropriate compspec for this response Z_RecordComposition *comp = 0; if (hits == -1 && m_presentRequest) - comp = m_presentRequest->recordComposition; + comp = m_presentRequest->recordComposition; else if (hits > 0 && m_searchRequest) { - Z_ElementSetNames *esn; - - if (hits <= *m_searchRequest->smallSetUpperBound) - esn = m_searchRequest->smallSetElementSetNames; - else - esn = m_searchRequest->mediumSetElementSetNames; - comp = (Z_RecordComposition *) nmem_malloc(m_mem, sizeof(*comp)); - comp->which = Z_RecordComp_simple; - comp->u.simple = esn; + Z_ElementSetNames *esn; + + if (hits <= *m_searchRequest->smallSetUpperBound) + esn = m_searchRequest->smallSetElementSetNames; + else + esn = m_searchRequest->mediumSetElementSetNames; + comp = (Z_RecordComposition *) nmem_malloc(m_mem, sizeof(*comp)); + comp->which = Z_RecordComp_simple; + comp->u.simple = esn; } // Z_NamePlusRecordList *npr to be owned by m_mem.. @@ -117,23 +117,23 @@ void RecordCache::add (ODR o, Z_NamePlusRecordList *npr, int start, int i; for (i = 0; inum_records; i++) { - RecordCache_Entry *entry = (RecordCache_Entry *) - nmem_malloc(m_mem, sizeof(*entry)); - entry->m_record = (Z_NamePlusRecord *) - nmem_malloc(m_mem, sizeof(*entry->m_record)); - entry->m_record->databaseName = npr->records[i]->databaseName; - entry->m_record->which = npr->records[i]->which; - entry->m_record->u.databaseRecord = npr->records[i]->u.databaseRecord; - entry->m_comp = comp; - entry->m_offset = i + start; - entry->m_next = m_entries; - m_entries = entry; + RecordCache_Entry *entry = (RecordCache_Entry *) + nmem_malloc(m_mem, sizeof(*entry)); + entry->m_record = (Z_NamePlusRecord *) + nmem_malloc(m_mem, sizeof(*entry->m_record)); + entry->m_record->databaseName = npr->records[i]->databaseName; + entry->m_record->which = npr->records[i]->which; + entry->m_record->u.databaseRecord = npr->records[i]->u.databaseRecord; + entry->m_comp = comp; + entry->m_offset = i + start; + entry->m_next = m_entries; + m_entries = entry; } } int RecordCache::match (RecordCache_Entry *entry, - Odr_oid *syntax, int offset, - Z_RecordComposition *comp) + Odr_oid *syntax, int offset, + Z_RecordComposition *comp) { // See if our compspec match... int match = 0; @@ -149,22 +149,22 @@ int RecordCache::match (RecordCache_Entry *entry, char *buf2 = odr_getbuf(o2, &len2, 0); if (buf1 && buf2 && len1 && len1 == len2 && !memcmp(buf1, buf2, len1)) - match = 1; + match = 1; else if (!buf1 && !buf2 && !len1 && !len2) - match = 1; + match = 1; odr_destroy(o1); odr_destroy(o2); if (!match) - return 0; + return 0; if (!syntax) - return 0; + return 0; // See if offset, OID match.. if (entry->m_offset == offset && - entry->m_record->which == Z_NamePlusRecord_databaseRecord && - !oid_oidcmp(entry->m_record->u.databaseRecord->direct_reference, - syntax)) - return 1; + entry->m_record->which == Z_NamePlusRecord_databaseRecord && + !oid_oidcmp(entry->m_record->u.databaseRecord->direct_reference, + syntax)) + return 1; #if 0 char mstr1[100]; oid_to_dotstring(entry->m_record->u.databaseRecord->direct_reference, mstr1); @@ -177,40 +177,48 @@ int RecordCache::match (RecordCache_Entry *entry, } int RecordCache::lookup (ODR o, Z_NamePlusRecordList **npr, - int start, int num, - Odr_oid *syntax, - Z_RecordComposition *comp) + int start, int num, + Odr_oid *syntax, + Z_RecordComposition *comp) { int i; yaz_log(YLOG_DEBUG, "cache lookup start=%d num=%d", start, num); for (i = 0; im_next) - if (match(entry, syntax, start+i, comp)) - break; - if (!entry) - return 0; + RecordCache_Entry *entry = m_entries; + for(; entry; entry = entry->m_next) + if (match(entry, syntax, start+i, comp)) + break; + if (!entry) + return 0; } *npr = (Z_NamePlusRecordList *) odr_malloc(o, sizeof(**npr)); (*npr)->num_records = num; (*npr)->records = (Z_NamePlusRecord **) - odr_malloc(o, num * sizeof(Z_NamePlusRecord *)); + odr_malloc(o, num * sizeof(Z_NamePlusRecord *)); for (i = 0; im_next) - if (match(entry, syntax, start+i, comp)) - break; - if (!entry) - return 0; - (*npr)->records[i] = (Z_NamePlusRecord *) - odr_malloc(o, sizeof(Z_NamePlusRecord)); - (*npr)->records[i]->databaseName = entry->m_record->databaseName; - (*npr)->records[i]->which = entry->m_record->which; - (*npr)->records[i]->u.databaseRecord = - entry->m_record->u.databaseRecord; + RecordCache_Entry *entry = m_entries; + for(; entry; entry = entry->m_next) + if (match(entry, syntax, start+i, comp)) + break; + if (!entry) + return 0; + (*npr)->records[i] = (Z_NamePlusRecord *) + odr_malloc(o, sizeof(Z_NamePlusRecord)); + (*npr)->records[i]->databaseName = entry->m_record->databaseName; + (*npr)->records[i]->which = entry->m_record->which; + (*npr)->records[i]->u.databaseRecord = + entry->m_record->u.databaseRecord; } return 1; } +/* + * Local variables: + * c-basic-offset: 4 + * indent-tabs-mode: nil + * End: + * vim: shiftwidth=4 tabstop=8 expandtab + */ +