forked from AuroraMiddleware/gtk
sortlistmodel: Use timsort
Simply replace the old qsort() call with a timsort() call. This is ultimately relevant because timsort is a LOT faster in merging to already sorted lists (think items-chaged adding some items) or reversing an existing list (think columnview sort order changes). Benchmarks: initially sorting the model qsort timsort 128,000 items 124ms 111ms 256,000 items 264ms 250ms
This commit is contained in:
parent
97c5cb3514
commit
800170b47d
@ -23,6 +23,7 @@
|
||||
|
||||
#include "gtkintl.h"
|
||||
#include "gtkprivate.h"
|
||||
#include "gtktimsortprivate.h"
|
||||
|
||||
typedef struct _SortItem SortItem;
|
||||
struct _SortItem
|
||||
@ -176,11 +177,11 @@ sort_func (gconstpointer a,
|
||||
static void
|
||||
gtk_sort_list_model_resort (GtkSortListModel *self)
|
||||
{
|
||||
g_qsort_with_data (sort_array_get_data (&self->items),
|
||||
sort_array_get_size (&self->items),
|
||||
sizeof (SortItem),
|
||||
sort_func,
|
||||
self->sorter);
|
||||
gtk_tim_sort (sort_array_get_data (&self->items),
|
||||
sort_array_get_size (&self->items),
|
||||
sizeof (SortItem),
|
||||
sort_func,
|
||||
self->sorter);
|
||||
}
|
||||
|
||||
static void
|
||||
|
Loading…
Reference in New Issue
Block a user