URL
https://opencores.org/ocsvn/eco32/eco32/trunk
Subversion Repositories eco32
[/] [eco32/] [tags/] [eco32-0.24/] [lcc/] [src/] [list.c] - Rev 258
Go to most recent revision | Compare with Previous | Blame | View Log
#include "c.h" static char rcsid[] = "$Id: list.c,v 1.1 2002/08/28 23:12:44 drh Exp $"; static List freenodes; /* free list nodes */ /* append - append x to list, return new list */ List append(void *x, List list) { List new; if ((new = freenodes) != NULL) freenodes = freenodes->link; else NEW(new, PERM); if (list) { new->link = list->link; list->link = new; } else new->link = new; new->x = x; return new; } /* length - # elements in list */ int length(List list) { int n = 0; if (list) { List lp = list; do n++; while ((lp = lp->link) != list); } return n; } /* ltov - convert list to an NULL-terminated vector allocated in arena */ void *ltov(List *list, unsigned arena) { int i = 0; void **array = newarray(length(*list) + 1, sizeof array[0], arena); if (*list) { List lp = *list; do { lp = lp->link; array[i++] = lp->x; } while (lp != *list); #ifndef PURIFY lp = (*list)->link; (*list)->link = freenodes; freenodes = lp; #endif } *list = NULL; array[i] = NULL; return array; }
Go to most recent revision | Compare with Previous | Blame | View Log