- GPtrArray *ret;
- sort_options.sort_attrs = NULL;
- /* tags_array isn not needed by tm_tag_compare(), but for tm_search_cmp() */
- sort_options.tags_array = NULL;
- sort_options.first = TRUE;
- foreach_ptr_array(s, i, q->names)
- {
TMTag **ptag;
sort_options.cmp_len = s->len;
if (q->data_sources & TM_QUERY_SOURCE_GLOBAL_TAGS)
{
tags = tm_tags_find(q->workspace->global_tags, s->str, s->len, &ntags);
foreach_c_array(ptag, tags, ntags)
g_queue_insert_sorted(&res, *ptag, tag_compare_ptr, &sort_options);
Sorting on insertion is bound to be slower than sorting at the end when building a complete set. Sorting on insertion is good when wanting to expand an existing sorted set and maintain it sorted (well, so long as the number of insertions is sufficiently small compared to the size of the data set). So you should just add, and sort like you want at the end (using `tm_tags_sort()` even, it's there!). IIUC, there is no need for the list to be sorted before returning it, so maintaining it sorted is just a waste of resources -- plus extra code for `tag_compare_ptr`.