diff options
Diffstat (limited to 'glib/gslist.c')
-rw-r--r-- | glib/gslist.c | 48 |
1 files changed, 47 insertions, 1 deletions
diff --git a/glib/gslist.c b/glib/gslist.c index 7045687ca2..636dd37dc4 100644 --- a/glib/gslist.c +++ b/glib/gslist.c @@ -57,7 +57,7 @@ g_slist_set_allocator (GListAllocator* fallocator) GSList* -g_slist_alloc () +g_slist_alloc (void) { GSList *new_list; @@ -289,6 +289,16 @@ g_slist_nth (GSList *list, return list; } +gpointer +g_slist_nth_data (GSList *list, + guint n) +{ + while ((n-- > 0) && list) + list = list->next; + + return list ? list->data : NULL; +} + GSList* g_slist_find (GSList *list, gpointer data) @@ -303,6 +313,42 @@ g_slist_find (GSList *list, return list; } +gint +g_slist_position (GSList *list, + GSList *link) +{ + gint i; + + i = 0; + while (list) + { + if (list == link) + return i; + i++; + list = list->next; + } + + return -1; +} + +gint +g_slist_index (GSList *list, + gpointer data) +{ + gint i; + + i = 0; + while (list) + { + if (list->data == data) + return i; + i++; + list = list->next; + } + + return -1; +} + GSList* g_slist_last (GSList *list) { |