<p>In <a href="https://github.com/geany/geany/pull/1187#discussion_r75842549">src/tagmanager/tm_query.c</a>:</p>
<pre style='color:#555'>> +    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);
</pre>
<p>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 <code>tm_tags_sort()</code> even, it's there!).<br>
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 <code>tag_compare_ptr</code>.</p>

<p style="font-size:small;-webkit-text-size-adjust:none;color:#666;">—<br />You are receiving this because you are subscribed to this thread.<br />Reply to this email directly, <a href="https://github.com/geany/geany/pull/1187/files/386006313a0b78c614bd1ac522ac121e093df58d#r75842549">view it on GitHub</a>, or <a href="https://github.com/notifications/unsubscribe-auth/ABDrJwu3qCysZVUzSLfs_-F0FcgujXg0ks5qitBOgaJpZM4JqVBL">mute the thread</a>.<img alt="" height="1" src="https://github.com/notifications/beacon/ABDrJ2znDiNwuLcCkbN5b2v8K-GnNYztks5qitBOgaJpZM4JqVBL.gif" width="1" /></p>
<div itemscope itemtype="http://schema.org/EmailMessage">
<div itemprop="action" itemscope itemtype="http://schema.org/ViewAction">
  <link itemprop="url" href="https://github.com/geany/geany/pull/1187/files/386006313a0b78c614bd1ac522ac121e093df58d#r75842549"></link>
  <meta itemprop="name" content="View Pull Request"></meta>
</div>
<meta itemprop="description" content="View this Pull Request on GitHub"></meta>
</div>

<script type="application/json" data-scope="inboxmarkup">{"api_version":"1.0","publisher":{"api_key":"05dde50f1d1a384dd78767c55493e4bb","name":"GitHub"},"entity":{"external_key":"github/geany/geany","title":"geany/geany","subtitle":"GitHub repository","main_image_url":"https://cloud.githubusercontent.com/assets/143418/17495839/a5054eac-5d88-11e6-95fc-7290892c7bb5.png","avatar_image_url":"https://cloud.githubusercontent.com/assets/143418/15842166/7c72db34-2c0b-11e6-9aed-b52498112777.png","action":{"name":"Open in GitHub","url":"https://github.com/geany/geany"}},"updates":{"snippets":[{"icon":"PERSON","message":"@b4n in #1187: 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!).\r\nIIUC, 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`."}],"action":{"name":"View Pull Request","url":"https://github.com/geany/geany/pull/1187/files/386006313a0b78c614bd1ac522ac121e093df58d#r75842549"}}}</script>