summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElliot Lee <sopwith@src.gnome.org>1998-06-07 20:18:21 +0000
committerElliot Lee <sopwith@src.gnome.org>1998-06-07 20:18:21 +0000
commita0d3a674d0740103446a0b4a926f485bd9566183 (patch)
tree2a33ff8c33ffe7dc36e3578f05d56e8f5ef25989
parent8725269e0d456795710f7515292b0e279584329f (diff)
downloadgtk+-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.h6
-rw-r--r--glib/glist.c15
-rw-r--r--glib/gslist.c14
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)