From b7df1c5af124d311c9d3c63073ed9252be4cb6b7 Mon Sep 17 00:00:00 2001 From: "matthias.ringwald" Date: Sat, 18 Jul 2009 20:43:58 +0000 Subject: [PATCH] forgot to add the basic linked_list --- src/linked_list.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++ src/linked_list.h | 21 +++++++++++++++++ 2 files changed, 81 insertions(+) create mode 100644 src/linked_list.c create mode 100644 src/linked_list.h diff --git a/src/linked_list.c b/src/linked_list.c new file mode 100644 index 000000000..312477764 --- /dev/null +++ b/src/linked_list.c @@ -0,0 +1,60 @@ +/* + * linked_list.c + * + * Created by Matthias Ringwald on 7/13/09. + */ + +#include "linked_list.h" + +/** + * linked_list_add + */ +void linked_list_add(linked_list_t * list, linked_item_t *item){ // <-- add item to list + // check if already in list + linked_item_t *it; + for (it = *list; it ; it = it->next){ + if (it == item) { + return; + } + } + // add first + item->next = *list; + *list = item; +} + +/** + * Remove data_source from run loop + * + * @note: assumes that data_source_t.next is first element in data_source + */ +int linked_list_remove(linked_list_t * list, linked_item_t *item){ // <-- remove item from list + linked_item_t *it; + for (it = (linked_item_t *) list; it ; it = it->next){ + if (it->next == item){ + it->next = item->next; + return 0; + } + } + return -1; +} + +void linked_item_set_user(linked_item_t *item, void *user_data){ + item->next = (void *) 0; + item->user_data = user_data; +}; + +void * linked_item_get_user(linked_item_t *item) { + return item->user_data; +}; + +#include +void test_linked_list(){ + linked_list_t testList = 0; + linked_item_t itemA; + linked_item_t itemB; + linked_item_set_user(&itemA, (void *) 0); + linked_item_set_user(&itemB, (void *) 0); + linked_list_add(&testList, &itemA); + linked_list_add(&testList, &itemB); + linked_list_remove(&testList, &itemB); +} \ No newline at end of file diff --git a/src/linked_list.h b/src/linked_list.h new file mode 100644 index 000000000..e8131b148 --- /dev/null +++ b/src/linked_list.h @@ -0,0 +1,21 @@ +/* + * linked_list.h + * + * Created by Matthias Ringwald on 7/13/09. + */ + +#pragma once + +typedef struct linked_item { + struct linked_item *next; // <-- next element in list, or NULL + void *user_data; // <-- pointer to struct base +} linked_item_t; + +typedef linked_item_t * linked_list_t; + +void linked_item_set_user(linked_item_t *item, void *user_data); // <-- set user data +void * linked_item_get_user(linked_item_t *item); // <-- get user data +void linked_list_add(linked_list_t * list, linked_item_t *item); // <-- add item to list +int linked_list_remove(linked_list_t * list, linked_item_t *item); // <-- remove item from list + +void test_linked_list(); \ No newline at end of file