25#ifndef __jack_jslist_h__
26#define __jack_jslist_h__
29#include <jack/systemdeps.h>
37typedef int (*JCompareFunc) (
void* a,
void* b);
46jack_slist_alloc (
void)
52 new_list->data = NULL;
53 new_list->next = NULL;
61jack_slist_prepend (
JSList* list,
void* data)
67 new_list->data = data;
68 new_list->next = list;
74#define jack_slist_next(slist) ((slist) ? (((JSList *)(slist))->next) : NULL)
77jack_slist_last (
JSList *list)
89jack_slist_remove_link (
JSList *list,
101 prev->next = tmp->next;
118jack_slist_free (
JSList *list)
121 JSList *next = list->next;
129jack_slist_free_1 (
JSList *list)
138jack_slist_remove (
JSList *list,
148 if (tmp->data == data) {
150 prev->next = tmp->next;
155 jack_slist_free (tmp);
169jack_slist_length (
JSList *list)
184jack_slist_find (
JSList *list,
188 if (list->data == data)
198jack_slist_copy (
JSList *list)
205 new_list = jack_slist_alloc ();
206 new_list->data = list->data;
210 last->next = jack_slist_alloc ();
212 last->data = list->data;
222jack_slist_append (
JSList *list,
228 new_list = jack_slist_alloc ();
229 new_list->data = data;
232 last = jack_slist_last (list);
233 last->next = new_list;
242jack_slist_sort_merge (
JSList *l1,
244 JCompareFunc compare_func)
251 if (compare_func(l1->data, l2->data) < 0) {
259 l->next = l1 ? l1 : l2;
266jack_slist_sort (
JSList *list,
267 JCompareFunc compare_func)
279 while ((l2 = l2->next) != NULL) {
280 if ((l2 = l2->next) == NULL)
287 return jack_slist_sort_merge (jack_slist_sort (list, compare_func),
288 jack_slist_sort (l2, compare_func),