diff options
Diffstat (limited to 'libs/fluidsynth/src/fluid_list.c')
-rw-r--r-- | libs/fluidsynth/src/fluid_list.c | 373 |
1 files changed, 213 insertions, 160 deletions
diff --git a/libs/fluidsynth/src/fluid_list.c b/libs/fluidsynth/src/fluid_list.c index dd47a39e0e..c92d731f89 100644 --- a/libs/fluidsynth/src/fluid_list.c +++ b/libs/fluidsynth/src/fluid_list.c @@ -2,16 +2,16 @@ * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald * * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public + * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. + * Lesser General Public License for more details. * - * You should have received a copy of the GNU Library General Public + * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02110-1301, USA. @@ -26,243 +26,296 @@ +#include "fluid_sys.h" #include "fluid_list.h" -fluid_list_t* +fluid_list_t * new_fluid_list(void) { - fluid_list_t* list; - list = (fluid_list_t*) FLUID_MALLOC(sizeof(fluid_list_t)); - list->data = NULL; - list->next = NULL; - return list; + fluid_list_t *list; + list = (fluid_list_t *) FLUID_MALLOC(sizeof(fluid_list_t)); + list->data = NULL; + list->next = NULL; + return list; } void delete_fluid_list(fluid_list_t *list) { - fluid_list_t *next; - while (list) { - next = list->next; - FLUID_FREE(list); - list = next; - } + fluid_list_t *next; + fluid_return_if_fail(list != NULL); + + while(list) + { + next = list->next; + FLUID_FREE(list); + list = next; + } } void delete1_fluid_list(fluid_list_t *list) { - if (list) { FLUID_FREE(list); - } } -fluid_list_t* -fluid_list_append(fluid_list_t *list, void* data) +fluid_list_t * +fluid_list_append(fluid_list_t *list, void *data) { - fluid_list_t *new_list; - fluid_list_t *last; + fluid_list_t *new_list; + fluid_list_t *last; - new_list = new_fluid_list(); - new_list->data = data; + new_list = new_fluid_list(); + new_list->data = data; - if (list) + if(list) { - last = fluid_list_last(list); - /* g_assert (last != NULL); */ - last->next = new_list; + last = fluid_list_last(list); + /* g_assert (last != NULL); */ + last->next = new_list; - return list; + return list; + } + else + { + return new_list; } - else - return new_list; } -fluid_list_t* -fluid_list_prepend(fluid_list_t *list, void* data) +fluid_list_t * +fluid_list_prepend(fluid_list_t *list, void *data) { - fluid_list_t *new_list; + fluid_list_t *new_list; - new_list = new_fluid_list(); - new_list->data = data; - new_list->next = list; + new_list = new_fluid_list(); + new_list->data = data; + new_list->next = list; - return new_list; + return new_list; } -fluid_list_t* +fluid_list_t * fluid_list_nth(fluid_list_t *list, int n) { - while ((n-- > 0) && list) { - list = list->next; - } + while((n-- > 0) && list) + { + list = list->next; + } - return list; + return list; } -fluid_list_t* -fluid_list_remove(fluid_list_t *list, void* data) +fluid_list_t * +fluid_list_remove(fluid_list_t *list, void *data) { - fluid_list_t *tmp; - fluid_list_t *prev; - - prev = NULL; - tmp = list; - - while (tmp) { - if (tmp->data == data) { - if (prev) { - prev->next = tmp->next; - } - if (list == tmp) { - list = list->next; - } - tmp->next = NULL; - delete_fluid_list(tmp); - - break; - } + fluid_list_t *tmp; + fluid_list_t *prev; - prev = tmp; - tmp = tmp->next; - } + prev = NULL; + tmp = list; - return list; + while(tmp) + { + if(tmp->data == data) + { + if(prev) + { + prev->next = tmp->next; + } + + if(list == tmp) + { + list = list->next; + } + + tmp->next = NULL; + delete_fluid_list(tmp); + + break; + } + + prev = tmp; + tmp = tmp->next; + } + + return list; } -fluid_list_t* +fluid_list_t * fluid_list_remove_link(fluid_list_t *list, fluid_list_t *link) { - fluid_list_t *tmp; - fluid_list_t *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; - break; - } + fluid_list_t *tmp; + fluid_list_t *prev; + + prev = NULL; + tmp = list; - prev = tmp; - tmp = tmp->next; - } + while(tmp) + { + if(tmp == link) + { + if(prev) + { + prev->next = tmp->next; + } + + if(list == tmp) + { + list = list->next; + } + + tmp->next = NULL; + break; + } + + prev = tmp; + tmp = tmp->next; + } - return list; + return list; } -static fluid_list_t* +static fluid_list_t * fluid_list_sort_merge(fluid_list_t *l1, fluid_list_t *l2, fluid_compare_func_t compare_func) { - fluid_list_t list, *l; + fluid_list_t list, *l; - l = &list; + l = &list; - while (l1 && l2) { - if (compare_func(l1->data,l2->data) < 0) { - l = l->next = l1; - l1 = l1->next; - } else { - l = l->next = l2; - l2 = l2->next; + while(l1 && l2) + { + if(compare_func(l1->data, l2->data) < 0) + { + l = l->next = l1; + l1 = l1->next; + } + else + { + l = l->next = l2; + l2 = l2->next; + } } - } - l->next= l1 ? l1 : l2; - return list.next; + l->next = l1 ? l1 : l2; + + return list.next; } -fluid_list_t* +fluid_list_t * fluid_list_sort(fluid_list_t *list, fluid_compare_func_t compare_func) { - fluid_list_t *l1, *l2; + fluid_list_t *l1, *l2; - if (!list) { - return NULL; - } - if (!list->next) { - return list; - } - - l1 = list; - l2 = list->next; - - while ((l2 = l2->next) != NULL) { - if ((l2 = l2->next) == NULL) - break; - l1=l1->next; - } - l2 = l1->next; - l1->next = NULL; - - return fluid_list_sort_merge(fluid_list_sort(list, compare_func), - fluid_list_sort(l2, compare_func), - compare_func); + if(!list) + { + return NULL; + } + + if(!list->next) + { + return list; + } + + l1 = list; + l2 = list->next; + + while((l2 = l2->next) != NULL) + { + if((l2 = l2->next) == NULL) + { + break; + } + + l1 = l1->next; + } + + l2 = l1->next; + l1->next = NULL; + + return fluid_list_sort_merge(fluid_list_sort(list, compare_func), + fluid_list_sort(l2, compare_func), + compare_func); } -fluid_list_t* +fluid_list_t * fluid_list_last(fluid_list_t *list) { - if (list) { - while (list->next) - list = list->next; - } + if(list) + { + while(list->next) + { + list = list->next; + } + } - return list; + return list; } int fluid_list_size(fluid_list_t *list) { - int n = 0; - while (list) { - n++; - list = list->next; - } - return n; + int n = 0; + + while(list) + { + n++; + list = list->next; + } + + return n; } -fluid_list_t* fluid_list_insert_at(fluid_list_t *list, int n, void* data) +fluid_list_t *fluid_list_insert_at(fluid_list_t *list, int n, void *data) { - fluid_list_t *new_list; - fluid_list_t *cur; - fluid_list_t *prev = NULL; + fluid_list_t *new_list; + fluid_list_t *cur; + fluid_list_t *prev = NULL; - new_list = new_fluid_list(); - new_list->data = data; + new_list = new_fluid_list(); + new_list->data = data; - cur = list; - while ((n-- > 0) && cur) { - prev = cur; - cur = cur->next; - } + cur = list; - new_list->next = cur; + while((n-- > 0) && cur) + { + prev = cur; + cur = cur->next; + } - if (prev) { - prev->next = new_list; - return list; - } else { - return new_list; - } + new_list->next = cur; + + if(prev) + { + prev->next = new_list; + return list; + } + else + { + return new_list; + } } /* Compare function to sort strings alphabetically, * for use with fluid_list_sort(). */ int -fluid_list_str_compare_func (void *a, void *b) +fluid_list_str_compare_func(void *a, void *b) { - if (a && b) return FLUID_STRCMP ((char *)a, (char *)b); - if (!a && !b) return 0; - if (a) return -1; - return 1; + if(a && b) + { + return FLUID_STRCMP((char *)a, (char *)b); + } + + if(!a && !b) + { + return 0; + } + + if(a) + { + return -1; + } + + return 1; } |