ucx/list.c

Thu, 05 Jan 2012 14:53:54 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Thu, 05 Jan 2012 14:53:54 +0100
changeset 20
db7d9860dbbd
parent 10
df8140ba781c
child 18
69636f81db31
permissions
-rw-r--r--

added some map functions

universe@10 1 #include "list.h"
olaf@2 2
universe@10 3 void ucx_list_free(UcxList *l) {
universe@10 4 UcxList *e = l, *f;
universe@10 5 while (e != NULL) {
universe@10 6 f = e;
universe@10 7 e = e->next;
universe@10 8 free(f);
universe@10 9 }
universe@10 10 }
universe@10 11
universe@10 12 UcxList *ucx_list_append(UcxList *l, void *data) {
universe@10 13 UcxList *nl = (UcxList*) malloc(sizeof(UcxList));
universe@10 14 if (nl == NULL) return NULL;
universe@10 15
universe@10 16 nl->data = data;
universe@10 17 nl->next = NULL;
universe@10 18 if (l == NULL) {
universe@10 19 return nl;
universe@10 20 } else {
universe@10 21 UcxList *t = ucx_list_last(l);
universe@10 22 t->next = nl;
universe@10 23 return l;
universe@10 24 }
universe@10 25 }
universe@10 26
universe@10 27 UcxList *ucx_list_prepend(UcxList *l, void *data) {
universe@10 28 UcxList *nl = ucx_list_append(NULL, data);
universe@10 29 if (nl == NULL) return NULL;
universe@10 30
universe@10 31 if (l != NULL) {
universe@10 32 nl->next = l;
universe@10 33 }
universe@10 34 return nl;
universe@10 35 }
universe@10 36
universe@10 37 UcxList *ucx_list_concat(UcxList *l1, UcxList *l2) {
universe@10 38 if (l1 == NULL) {
universe@10 39 return l2;
universe@10 40 } else {
universe@10 41 UcxList *last = ucx_list_last(l1);
universe@10 42 last->next = l2;
universe@10 43 return l1;
universe@10 44 }
universe@10 45 }
universe@10 46
universe@10 47 UcxList *ucx_list_last(UcxList *l) {
universe@10 48 if (l == NULL) return NULL;
universe@10 49
universe@10 50 UcxList *e = l;
universe@10 51 while (e->next != NULL) {
universe@10 52 e = e->next;
universe@10 53 }
universe@10 54 return e;
universe@10 55 }
universe@10 56
universe@10 57 UcxList *ucx_list_get(UcxList *l, int index) {
universe@10 58 if (l == NULL) return NULL;
universe@10 59
universe@10 60 UcxList *e = l;
universe@10 61 while (e->next != NULL && index > 0) {
universe@10 62 e = e->next;
universe@10 63 index--;
universe@10 64 }
universe@10 65
universe@10 66 return index == 0 ? e : NULL;
universe@10 67 }
universe@10 68
universe@10 69 size_t ucx_list_size(UcxList *l) {
universe@10 70 if (l == NULL) return 0;
universe@10 71
universe@10 72 UcxList *e = l;
universe@10 73 size_t s = 1;
universe@10 74 while (e->next != NULL) {
universe@10 75 e = e->next;
universe@10 76 s++;
universe@10 77 }
universe@10 78
universe@10 79 return s;
universe@10 80 }
universe@10 81
universe@10 82 void ucx_list_foreach(UcxList *l, ucx_callback fnc, void* data) {
universe@10 83 UcxList *e = l;
universe@10 84 while (e != NULL) {
universe@10 85 fnc(e, data);
universe@10 86 e = e->next;
universe@10 87 }
universe@10 88 }

mercurial