|
|
1.1 ! root 1: #include "jove.h" ! 2: #include "list.h" ! 3: ! 4: extern char *emalloc(); ! 5: ! 6: private List * ! 7: list_new() ! 8: { ! 9: List *new; ! 10: ! 11: new = (List *) emalloc(sizeof (List)); ! 12: new->car = NIL; ! 13: return new; ! 14: } ! 15: ! 16: /* push an object to the beginning of list */ ! 17: ! 18: Element * ! 19: list_push(list, element) ! 20: register List **list; ! 21: Element *element; ! 22: { ! 23: List *new; ! 24: ! 25: new = list_new(); ! 26: new->cdr = *list; ! 27: new->car = element; ! 28: *list = new; ! 29: return element; ! 30: } ! 31: ! 32: Element * ! 33: list_pop(list) ! 34: List **list; ! 35: { ! 36: List *cell; ! 37: Element *element; ! 38: ! 39: if (*list == NIL) ! 40: return NIL; ! 41: cell = *list; ! 42: element = cell->car; ! 43: free((char *) cell); ! 44: *list = (*list)->cdr; ! 45: ! 46: return element; ! 47: } ! 48: ! 49: #ifdef NEVER ! 50: Element * ! 51: list_remove(list_head, element) ! 52: List **list_head; ! 53: Element *element; ! 54: { ! 55: register List *cp = *list_head, ! 56: *prev = NIL; ! 57: ! 58: while (cp != NIL) { ! 59: if (cp->car == element) ! 60: break; ! 61: prev = cp; ! 62: cp = cp->cdr; ! 63: } ! 64: if (cp == NIL) ! 65: return NIL; ! 66: if (prev == NIL) ! 67: *list_head = (*list_head)->cdr; ! 68: else ! 69: prev->cdr = cp->cdr; ! 70: ! 71: return element; ! 72: } ! 73: ! 74: Element * ! 75: list_append(list, element) ! 76: List **list; ! 77: Element *element; ! 78: { ! 79: List *new, *lp; ! 80: ! 81: lp = *list; ! 82: if (lp == NIL) ! 83: return list_push(list, element); ! 84: ! 85: while (lp->cdr != NIL) ! 86: lp = lp->cdr; ! 87: new = list_new(); ! 88: lp->cdr = new; ! 89: new->car = element; ! 90: ! 91: return element; ! 92: } ! 93: ! 94: Element * ! 95: list_find(list, element) ! 96: List *list; ! 97: Element *element; ! 98: { ! 99: while (list != NIL) ! 100: if (list->car == element) ! 101: return element; ! 102: return NIL; ! 103: } ! 104: #endif /* NEVER */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.