From: Fredrick M. <fr...@us...> - 2005-05-18 00:57:00
|
Update of /cvsroot/fuse-emulator/libspectrum/myglib In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv5028/myglib Modified Files: gslist.c Log Message: Add g_slist_delete_link, g_slist_insert, g_slist_length, GINT_TO_POINTER and GPOINTER_TO_INT to the glib emulation layer. Index: gslist.c =================================================================== RCS file: /cvsroot/fuse-emulator/libspectrum/myglib/gslist.c,v retrieving revision 1.18 retrieving revision 1.19 diff -C2 -d -r1.18 -r1.19 *** gslist.c 14 Apr 2004 15:31:09 -0000 1.18 --- gslist.c 18 May 2005 00:56:27 -0000 1.19 *************** *** 44,47 **** --- 44,102 ---- GSList * free_list = NULL; + GSList* g_slist_insert (GSList *list, + gpointer data, + gint position) { + + GSList *prev_list; + GSList *tmp_list; + GSList *new_list; + + if (position < 0) + return g_slist_append (list, data); + else if (position == 0) + return g_slist_prepend (list, data); + + + if(!free_list) { + int i; + free_list=(GSList *)malloc(1024*sizeof(GSList)); + for(i=0;i<1023;i++) + free_list[i].next=&free_list[i+1]; + free_list[1023].next=NULL; + } + + new_list = free_list; + free_list=free_list->next; + new_list->data = data; + new_list->next=NULL; + + if (!list) + { + return new_list; + } + + prev_list = NULL; + tmp_list = list; + + while ((position-- > 0) && tmp_list) + { + prev_list = tmp_list; + tmp_list = tmp_list->next; + } + + if (prev_list) + { + new_list->next = prev_list->next; + prev_list->next = new_list; + } + else + { + new_list->next = list; + list = new_list; + } + + return list; + } + GSList* g_slist_insert_sorted (GSList *list, gpointer data, *************** *** 163,166 **** --- 218,266 ---- } + GSList* g_slist_delete_link (GSList *list, + GSList *link) { + + GSList *tmp; + GSList *prev; + + prev = NULL; + tmp = list; + + while (tmp) + { + if (tmp == link) + { + if (prev) + prev->next = tmp->next; + if (list == tmp) + list = list->next; + + tmp->next = NULL; + g_slist_free (tmp); + break; + } + + prev = tmp; + tmp = tmp->next; + } + + return list; + } + + guint + g_slist_length (GSList *list) + { + guint length; + + length = 0; + while (list) + { + length++; + list = list->next; + } + + return length; + } + void g_slist_foreach (GSList *list, GFunc func, |