* Sebastian Hammer, Adam Dickmeiss
*
* $Log: zsets.c,v $
- * Revision 1.27 2000-04-05 09:49:36 adam
+ * Revision 1.29 2001-01-22 10:42:56 adam
+ * Added numerical sort.
+ *
+ * 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
struct sortKeyInfo {
int relation;
int attrUse;
+ int numerical;
};
void resultSetInsertSort (ZebraHandle zh, ZebraSet sset,
int rel = 0;
for (j = 0; j<num_criteria; j++)
{
- rel = memcmp (this_entry.buf[j], sort_info->entries[i]->buf[j],
+ if (criteria[j].numerical)
+ {
+ double diff = atof(this_entry.buf[j]) -
+ atof(sort_info->entries[i]->buf[j]);
+ rel = 0;
+ if (diff > 0.0)
+ rel = 1;
+ else if (diff < 0.0)
+ rel = -1;
+ }
+ else
+ {
+ rel = memcmp (this_entry.buf[j], sort_info->entries[i]->buf[j],
SORT_IDX_ENTRYSIZE);
+ }
if (rel)
break;
}
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;
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;
}
logf (LOG_DEBUG, "Sort: key %d is of type sortAttributes", i+1);
sort_criteria[i].attrUse =
zebra_maps_sort (zh->service->zebra_maps,
- sk->u.sortAttributes);
+ sk->u.sortAttributes,
+ &sort_criteria[i].numerical);
logf (LOG_DEBUG, "use value = %d", sort_criteria[i].attrUse);
if (sort_criteria[i].attrUse == -1)
{