In src/tagmanager/tm_query.c:

> +			match = tag->type & q->type;
> +
> +		/* Remove tag from the results. tags are unowned so removing is easy */
> +		if (!match)
> +			g_queue_unlink(&res, node);
> +	}
> +
> +	/* Convert GQueue to GPtrArray for sort, dedup and return */
> +	i = 0;
> +	ret = g_ptr_array_sized_new(g_queue_get_length(&res));
> +	foreach_list(node, res.head)
> +	{
> +		tag = (TMTag *) node->data;
> +		g_ptr_array_insert(ret, i++, tag);
> +	}
> +	g_list_free(res.head);

There is no need to add in the middle. As mentioned above, sorting before the end looks like a bad idea here, so you end up trading prunning the array with building a list. And prunning the array is basically implemented as a set of pointer moves, not consecutive memmove()s.


You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or mute the thread.