From d54b824ca309141da489284e5b6d78d7094f5494 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Thu, 14 Nov 2013 14:18:52 +0100 Subject: [PATCH] Make improved RecordCache::add YPP-10 This will take a CompSpec as argument. We leave existing RecordCache:add for now. --- include/yazpp/record-cache.h | 2 ++ src/yaz-z-cache.cpp | 36 ++++++++++++++++++++---------------- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/include/yazpp/record-cache.h b/include/yazpp/record-cache.h index 935b4a7..027f064 100644 --- a/include/yazpp/record-cache.h +++ b/include/yazpp/record-cache.h @@ -36,6 +36,8 @@ class YAZ_EXPORT RecordCache { RecordCache (); ~RecordCache (); void add(ODR o, Z_NamePlusRecordList *npr, int start, int hits); + void add(ODR o, Z_NamePlusRecordList *npr, int start, + Z_RecordComposition *comp); int lookup(ODR o, Z_NamePlusRecordList **npr, int start, int num, Odr_oid *syntax, Z_RecordComposition *comp); diff --git a/src/yaz-z-cache.cpp b/src/yaz-z-cache.cpp index 6c283ac..f023924 100644 --- a/src/yaz-z-cache.cpp +++ b/src/yaz-z-cache.cpp @@ -100,12 +100,29 @@ void RecordCache::copy_presentRequest(Z_PresentRequest *pr) odr_destroy(decode); } - void RecordCache::add(ODR o, Z_NamePlusRecordList *npr, int start, - int hits) + Z_RecordComposition *comp) { if (nmem_total(m_p->nmem) > m_p->max_size) return; + // Insert individual records in cache + int i; + for (i = 0; i < npr->num_records; i++) + { + RecordCache_Entry *entry = (RecordCache_Entry *) + nmem_malloc(m_p->nmem, sizeof(*entry)); + entry->m_record = + yaz_clone_z_NamePlusRecord(npr->records[i], m_p->nmem); + entry->m_comp = yaz_clone_z_RecordComposition(comp, m_p->nmem); + entry->m_offset = i + start; + entry->m_next = m_p->entries; + m_p->entries = entry; + } +} + +void RecordCache::add(ODR o, Z_NamePlusRecordList *npr, int start, + int hits) +{ // Build appropriate compspec for this response Z_RecordComposition *comp = 0; if (hits == -1 && m_p->presentRequest) @@ -122,20 +139,7 @@ void RecordCache::add(ODR o, Z_NamePlusRecordList *npr, int start, comp->which = Z_RecordComp_simple; comp->u.simple = esn; } - - // Insert individual records in cache - int i; - for (i = 0; inum_records; i++) - { - RecordCache_Entry *entry = (RecordCache_Entry *) - nmem_malloc(m_p->nmem, sizeof(*entry)); - entry->m_record = - yaz_clone_z_NamePlusRecord(npr->records[i], m_p->nmem); - entry->m_comp = yaz_clone_z_RecordComposition(comp, m_p->nmem); - entry->m_offset = i + start; - entry->m_next = m_p->entries; - m_p->entries = entry; - } + add(o, npr, start, comp); } int RecordCache::Rep::match(RecordCache_Entry *entry, -- 1.7.10.4