- sr = (ZebraPosSet) xmalloc (sizeof(*sr) * num);
- for (i = 0; i<num; i++)
- {
- sr[i].sysno = 0;
- sr[i].score = -1;
- sr[i].term = 0;
- sr[i].db = 0;
- }
- sort_info = sset->sort_info;
- if (sort_info)
- {
- int position;
-
- for (i = 0; i<num; i++)
- {
- position = positions[i];
- if (position > 0 && position <= sort_info->num_entries)
- {
- yaz_log (LOG_DEBUG, "got pos=%d (sorted)", position);
- sr[i].sysno = sort_info->entries[position-1]->sysno;
- sr[i].score = sort_info->entries[position-1]->score;
- }
- }
- }
- /* did we really get all entries using sort ? */
- for (i = 0; i<num; i++)
- {
- if (!sr[i].sysno)
- break;
- }
- if (i < num) /* nope, get the rest, unsorted - sorry */
- {
- int position = 0;
- int num_i = 0;
- zint psysno = 0;
- int term_index;
- RSFD rfd;
- struct it_key key;
-
- if (sort_info)
- position = sort_info->num_entries;
- while (num_i < num && positions[num_i] < position)
- num_i++;
- rfd = rset_open (rset, RSETF_READ);
- while (num_i < num && rset_read (rset, rfd, &key, &term_index))
- {
-#if IT_KEY_NEW
- zint this_sys = key.mem[0];
-#else
- zint this_sys = key.sysno;
-#endif
- if (this_sys != psysno)
- {
- psysno = this_sys;
- if (sort_info)
- {
- /* determine we alreay have this in our set */
- for (i = sort_info->num_entries; --i >= 0; )
- if (psysno == sort_info->entries[i]->sysno)
- break;
- if (i >= 0)
- continue;
- }
- position++;
- assert (num_i < num);
- if (position == positions[num_i])
- {
- sr[num_i].sysno = psysno;
- yaz_log (LOG_DEBUG, "got pos=%d (unsorted)", position);
- sr[num_i].score = -1;
- num_i++;
- }
- }
- }
- rset_close (rset, rfd);
- }
+ sr = (ZebraPosSet) xmalloc (sizeof(*sr) * num);
+ for (i = 0; i<num; i++)
+ {
+ sr[i].sysno = 0;
+ sr[i].score = -1;
+ sr[i].term = 0;
+ sr[i].db = 0;
+ }
+ sort_info = sset->sort_info;
+ if (sort_info)
+ {
+ int position;
+
+ for (i = 0; i<num; i++)
+ {
+ position = positions[i];
+ if (position > 0 && position <= sort_info->num_entries)
+ {
+ yaz_log (LOG_DEBUG, "got pos=%d (sorted)", position);
+ sr[i].sysno = sort_info->entries[position-1]->sysno;
+ sr[i].score = sort_info->entries[position-1]->score;
+ }
+ }
+ }
+ /* did we really get all entries using sort ? */
+ for (i = 0; i<num; i++)
+ {
+ if (!sr[i].sysno)
+ break;
+ }
+ if (i < num) /* nope, get the rest, unsorted - sorry */
+ {
+ int position = 0;
+ int num_i = 0;
+ zint psysno = 0;
+ RSFD rfd;
+ struct it_key key;
+
+ if (sort_info)
+ position = sort_info->num_entries;
+ while (num_i < num && positions[num_i] < position)
+ num_i++;
+ rfd = rset_open (rset, RSETF_READ);
+ while (num_i < num && rset_read (rfd, &key))
+ {
+ zint this_sys = key.mem[0];
+ if (this_sys != psysno)
+ {
+ psysno = this_sys;
+ if (sort_info)
+ {
+ /* determine we alreay have this in our set */
+ for (i = sort_info->num_entries; --i >= 0; )
+ if (psysno == sort_info->entries[i]->sysno)
+ break;
+ if (i >= 0)
+ continue;
+ }
+ position++;
+ assert (num_i < num);
+ if (position == positions[num_i])
+ {
+ sr[num_i].sysno = psysno;
+ yaz_log (LOG_DEBUG, "got pos=%d (unsorted)", position);
+ sr[num_i].score = -1;
+ num_i++;
+ }
+ }
+ }
+ rset_close (rfd);
+ }