diff options
author | Elliot Lee <sopwith@src.gnome.org> | 1998-06-07 20:18:21 +0000 |
---|---|---|
committer | Elliot Lee <sopwith@src.gnome.org> | 1998-06-07 20:18:21 +0000 |
commit | a0d3a674d0740103446a0b4a926f485bd9566183 (patch) | |
tree | 2a33ff8c33ffe7dc36e3578f05d56e8f5ef25989 | |
parent | 8725269e0d456795710f7515292b0e279584329f (diff) | |
download | gtk+-a0d3a674d0740103446a0b4a926f485bd9566183.tar.gz |
Added g_s?list_find_custom functions to allow user to specify a
Added g_s?list_find_custom functions to allow user to specify a
GCompareFunc to determine whether a node matches or not.
If you have a better idea for naming the functions, please, make it so! :)
-rw-r--r-- | glib/glib.h | 6 | ||||
-rw-r--r-- | glib/glist.c | 15 | ||||
-rw-r--r-- | glib/gslist.c | 14 |
3 files changed, 35 insertions, 0 deletions
diff --git a/glib/glib.h b/glib/glib.h index 6dada46852..343de406ad 100644 --- a/glib/glib.h +++ b/glib/glib.h @@ -531,6 +531,9 @@ GList* g_list_nth (GList *list, guint n); GList* g_list_find (GList *list, gpointer data); +GList *g_list_find_custom (GList *list, + gpointer data, + GCompareFunc func); gint g_list_position (GList *list, GList *link); gint g_list_index (GList *list, @@ -574,6 +577,9 @@ GSList* g_slist_nth (GSList *list, guint n); GSList* g_slist_find (GSList *list, gpointer data); +GSList *g_slist_find_custom (GSList *list, + gpointer data, + GCompareFunc func); gint g_slist_position (GSList *list, GSList *link); gint g_slist_index (GSList *list, diff --git a/glib/glist.c b/glib/glist.c index a24751cbc3..3f84528aa7 100644 --- a/glib/glist.c +++ b/glib/glist.c @@ -324,6 +324,21 @@ g_list_find (GList *list, return list; } +GList * +g_list_find_custom(GList *list, gpointer data, GCompareFunc func) +{ + if(!func) return g_list_find(list, data); + + while (list) + { + if ( !((*func)(list->data, data)) ) break; + list = list->next; + } + + return list; +} + + gint g_list_position (GList *list, GList *link) diff --git a/glib/gslist.c b/glib/gslist.c index 636dd37dc4..cdfc64cb33 100644 --- a/glib/gslist.c +++ b/glib/gslist.c @@ -313,6 +313,20 @@ g_slist_find (GSList *list, return list; } +GSList * +g_slist_find_custom(GSList *list, gpointer data, GCompareFunc func) +{ + if(!func) return g_slist_find(list, data); + + while (list) + { + if ( !((*func)(list->data, data)) ) break; + list = list->next; + } + + return list; +} + gint g_slist_position (GSList *list, GSList *link) |