summaryrefslogtreecommitdiff
path: root/glist.c
diff options
context:
space:
mode:
authorJonathan Blandford <jrb@redhat.com>2000-11-20 23:59:32 +0000
committerJonathan Blandford <jrb@src.gnome.org>2000-11-20 23:59:32 +0000
commit2645aaf59c540e25915da43eb1cb7fff6f445e6d (patch)
tree40c662781877308f8de470a4fc469e34a1a9af42 /glist.c
parent40d62d0dd7ba5d5cc9dd00beb72599535f84ae8a (diff)
downloadglib-2645aaf59c540e25915da43eb1cb7fff6f445e6d.tar.gz
Patch from David Benson <daveb@idealab.com> to add user_data support to
Mon Nov 20 18:55:17 2000 Jonathan Blandford <jrb@redhat.com> * gtree.[hc]: Patch from David Benson <daveb@idealab.com> to add user_data support to gtree functions. Mon Nov 13 18:35:52 2000 Jonathan Blandford <jrb@redhat.com> * gtypes.h (GCompareFuncData): new func type to let you use user data when comparing nodes. * gslist.c (g_list_sort_with_data): new function to sort with user_data. * glist.c (g_list_sort_with_data): new function to sort with user_data. * garray.[ch]: Added convenience functions to sort arrays.
Diffstat (limited to 'glist.c')
-rw-r--r--glist.c49
1 files changed, 39 insertions, 10 deletions
diff --git a/glist.c b/glist.c
index 04232129a..4b5934432 100644
--- a/glist.c
+++ b/glist.c
@@ -596,18 +596,26 @@ g_list_insert_sorted (GList *list,
}
static GList *
-g_list_sort_merge (GList *l1,
- GList *l2,
- GCompareFunc compare_func)
+g_list_sort_merge (GList *l1,
+ GList *l2,
+ GFunc compare_func,
+ gboolean use_data,
+ gpointer user_data)
{
GList list, *l, *lprev;
+ gint cmp;
l = &list;
lprev = NULL;
while (l1 && l2)
{
- if (compare_func (l1->data, l2->data) < 0)
+ if (use_data)
+ cmp = ((GCompareFuncData) compare_func) (l1->data, l2->data, user_data);
+ else
+ cmp = ((GCompareFunc) compare_func) (l1->data, l2->data);
+
+ if (cmp <= 0)
{
l->next = l1;
l = l->next;
@@ -631,8 +639,10 @@ g_list_sort_merge (GList *l1,
}
GList*
-g_list_sort (GList *list,
- GCompareFunc compare_func)
+g_list_sort_real (GList *list,
+ GFunc compare_func,
+ gboolean use_data,
+ gpointer user_data)
{
GList *l1, *l2;
@@ -653,9 +663,27 @@ g_list_sort (GList *list,
l2 = l1->next;
l1->next = NULL;
- return g_list_sort_merge (g_list_sort (list, compare_func),
- g_list_sort (l2, compare_func),
- compare_func);
+ return g_list_sort_merge (g_list_sort_real (list, compare_func, use_data, user_data),
+ g_list_sort_real (l2, compare_func, use_data, user_data),
+ compare_func,
+ use_data,
+ user_data);
+}
+
+GList *
+g_list_sort (GList *list,
+ GCompareFunc compare_func)
+{
+ return g_list_sort_real (list, (GFunc) compare_func, FALSE, NULL);
+
+}
+
+GList *
+g_list_sort_with_data (GList *list,
+ GCompareFuncData compare_func,
+ gpointer user_data)
+{
+ return g_list_sort_real (list, (GFunc) compare_func, TRUE, user_data);
}
GList*
@@ -691,7 +719,8 @@ g_list_sort2 (GList *list,
{
dst->data = g_list_sort_merge (src->data,
src->next->data,
- compare_func);
+ (GFunc) compare_func,
+ FALSE, NULL);
dstprev = dst;
dst = dst->next;
src = src->next->next;