26 #ifndef __jack_jslist_h__
27 #define __jack_jslist_h__
33 typedef int (*JCompareFunc) (
void* a,
43 jack_slist_alloc (
void)
48 new_list->data = NULL;
49 new_list->next = NULL;
56 jack_slist_prepend (
JSList *list,
62 new_list->data = data;
63 new_list->next = list;
68 #define jack_slist_next(slist) ((slist) ? (((JSList *)(slist))->next) : NULL)
71 jack_slist_last (
JSList *list)
83 jack_slist_remove_link (
JSList *list,
95 prev->next = tmp->next;
112 jack_slist_free (
JSList *list)
115 JSList *next = list->next;
123 jack_slist_free_1 (
JSList *list)
132 jack_slist_remove (
JSList *list,
142 if (tmp->data == data) {
144 prev->next = tmp->next;
149 jack_slist_free (tmp);
163 jack_slist_length (
JSList *list)
178 jack_slist_find (
JSList *list,
182 if (list->data == data)
192 jack_slist_copy (
JSList *list)
199 new_list = jack_slist_alloc ();
200 new_list->data = list->data;
204 last->next = jack_slist_alloc ();
206 last->data = list->data;
216 jack_slist_append (
JSList *list,
222 new_list = jack_slist_alloc ();
223 new_list->data = data;
226 last = jack_slist_last (list);
227 last->next = new_list;
236 jack_slist_sort_merge (
JSList *l1,
238 JCompareFunc compare_func)
245 if (compare_func(l1->data, l2->data) < 0) {
253 l->next = l1 ? l1 : l2;
260 jack_slist_sort (
JSList *list,
261 JCompareFunc compare_func)
273 while ((l2 = l2->next) != NULL) {
274 if ((l2 = l2->next) == NULL)
281 return jack_slist_sort_merge (jack_slist_sort (list, compare_func),
282 jack_slist_sort (l2, compare_func),