X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Fzsets.c;h=d2ebf5f66b15cb7ca9a2441c616c5ea76c9bfa1f;hb=5a78c428319c846f4b6d0426a0a590f769e2c631;hp=c6a03c25f63e559a45054115ef7e0bb6176be9b0;hpb=eb2b742588ce07fb4516bbca22c93b938b13e433;p=idzebra-moved-to-github.git diff --git a/index/zsets.c b/index/zsets.c index c6a03c2..d2ebf5f 100644 --- a/index/zsets.c +++ b/index/zsets.c @@ -1,10 +1,20 @@ /* - * Copyright (C) 1994-1999, Index Data + * Copyright (C) 1994-2000, Index Data * All rights reserved. * Sebastian Hammer, Adam Dickmeiss * * $Log: zsets.c,v $ - * Revision 1.25 2000-03-15 15:00:31 adam + * Revision 1.28 2000-07-07 12:49:20 adam + * Optimized resultSetInsert{Rank,Sort}. + * + * Revision 1.27 2000/04/05 09:49:36 adam + * On Unix, zebra/z'mbol uses automake. + * + * Revision 1.26 2000/03/20 19:08:36 adam + * Added remote record import using Z39.50 extended services and Segment + * Requests. + * + * Revision 1.25 2000/03/15 15:00:31 adam * First work on threaded version. * * Revision 1.24 1999/11/04 15:00:45 adam @@ -358,13 +368,13 @@ void zebraPosSetDestroy (ZebraHandle zh, ZebraPosSet records, int num) xfree (records); } -struct sortKey { +struct sortKeyInfo { int relation; int attrUse; }; void resultSetInsertSort (ZebraHandle zh, ZebraSet sset, - struct sortKey *criteria, int num_criteria, + struct sortKeyInfo *criteria, int num_criteria, int sysno) { struct zset_sort_entry this_entry; @@ -402,20 +412,23 @@ void resultSetInsertSort (ZebraHandle zh, ZebraSet sset, break; } } - j = sort_info->max_entries-1; + ++i; + j = sort_info->max_entries; if (i == j) return; - ++i; + + if (sort_info->num_entries == j) + --j; + else + j = (sort_info->num_entries)++; new_entry = sort_info->entries[j]; while (j != i) { sort_info->entries[j] = sort_info->entries[j-1]; --j; } - sort_info->entries[j] = new_entry; + sort_info->entries[i] = new_entry; assert (new_entry); - if (sort_info->num_entries != sort_info->max_entries) - (sort_info->num_entries)++; for (i = 0; ibuf[i], this_entry.buf[i], SORT_IDX_ENTRYSIZE); new_entry->sysno = sysno; @@ -446,20 +459,24 @@ void resultSetInsertRank (ZebraHandle zh, struct zset_sort_info *sort_info, break; } } - j = sort_info->max_entries-1; + ++i; + j = sort_info->max_entries; if (i == j) return; - ++i; + + if (sort_info->num_entries == j) + --j; + else + j = (sort_info->num_entries)++; + new_entry = sort_info->entries[j]; while (j != i) { sort_info->entries[j] = sort_info->entries[j-1]; --j; } - sort_info->entries[j] = new_entry; + sort_info->entries[i] = new_entry; assert (new_entry); - if (sort_info->num_entries != sort_info->max_entries) - (sort_info->num_entries)++; new_entry->sysno = sysno; new_entry->score = score; } @@ -512,7 +529,7 @@ void resultSetSortSingle (ZebraHandle zh, NMEM nmem, { int i, psysno = 0; struct it_key key; - struct sortKey sort_criteria[3]; + struct sortKeyInfo sort_criteria[3]; int num_criteria; int term_index; RSFD rfd; @@ -591,7 +608,6 @@ void resultSetSortSingle (ZebraHandle zh, NMEM nmem, } rset_close (rset, rfd); - zh->errCode = 0; *sort_status = Z_SortStatus_success; logf (LOG_DEBUG, "resultSetSortSingle end"); }