Fixed bug regarding user-defined attribute sets.
[idzebra-moved-to-github.git] / index / zsets.c
index 07d4f03..d2ebf5f 100644 (file)
@@ -1,10 +1,16 @@
 /*
- * 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.26  2000-03-20 19:08:36  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.
  *
@@ -406,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; i<num_criteria; i++)
        memcpy (new_entry->buf[i], this_entry.buf[i], SORT_IDX_ENTRYSIZE);
     new_entry->sysno = sysno;
@@ -450,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;
 }
@@ -595,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");
 }