[Github-comments] [geany/geany] New tagmanager query module (#1187)

Colomban Wendling notifications at xxxxx
Tue Aug 23 22:13:26 UTC 2016


> +	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);

> since the insertion point can be found with bisection

It couldn't as lists don't allow random access.  The only way is basically to traverse the whole list up to the insertion point.  If you knew the data set you could imagine making a guess at whether it's "close to" the end/start and start there, but that's as good as it gets AFAIK.

Sorting is a different story, because you can sort several items at once if you find interesting properties on them, and can take clever paths in some cases, but that doesn't work with a single insertion.

> The array still has the slight disadvantage that it must be resized when adding items exceeding the lenght, but this is not a problem here.

Yeah well, it's not so much worse than allocating the whole array at the end as `GPtrArray` is not so stupid and grows in chunks.

-- 
You are receiving this because you are subscribed to this thread.
Reply to this email directly or view it on GitHub:
https://github.com/geany/geany/pull/1187/files/386006313a0b78c614bd1ac522ac121e093df58d#r75961565
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.geany.org/pipermail/github-comments/attachments/20160823/0b116e8e/attachment.html>


More information about the Github-comments mailing list