File: dlist.h

package info (click to toggle)
f2j 0.8.1%2Bdfsg-6
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 3,604 kB
  • sloc: ansic: 18,992; java: 3,987; yacc: 3,804; sh: 153; makefile: 149
file content (50 lines) | stat: -rw-r--r-- 1,585 bytes parent folder | download | duplicates (12)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/* Jim Plank's dlist routines.  Contact plank@cs.utk.edu  */

#ifndef _DLIST_H
#define _DLIST_H

typedef struct dlist {
  struct dlist *flink;
  struct dlist *blink;
  void *val;
} *Dlist;

/* Nil, first, next, and prev are macro expansions for list traversal 
 * primitives. */

#define dl_nil(l) (l)

#define dl_first(l) (l->flink)

#define dl_last(l) (l->blink)

#define dl_next(n) (n->flink)

#define dl_prev(n) (n->blink)

/* These are the routines for manipluating lists */

extern Dlist make_dl(void);
extern void dl_insert_b(Dlist, void *); /* Makes a new node, and inserts it before
                                        the given node -- if that node is the 
                                        head of the list, the new node is 
                                        inserted at the end of the list */
#define dl_insert_a(n, val) dl_insert_b(n->flink, val)

extern void dl_delete_node(Dlist);    /* Deletes and free's a node */

extern void dl_delete_list(Dlist);  /* Deletes the entire list from
                                            existance */
extern void *dl_val(Dlist);   /* Returns node->val (used to shut lint up) */
extern void *dl_pop(Dlist);  /* returns the first node and removes
                                          it from the list */

extern void dl_insert_list_b(Dlist, Dlist);

#define dl_traverse(ptr, list) \
  for (ptr = dl_first(list); ptr != dl_nil(list); ptr = dl_next(ptr))
#define dl_traverse_b(ptr, list) \
  for (ptr = dl_last(list); ptr != dl_nil(list); ptr = dl_prev(ptr))
#define dl_empty(list) (list->flink == list)

#endif