|
|
1.1 root 1: /*
2: * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
3: * All rights reserved.
4: *
5: * This code is derived from software contributed to Berkeley by
6: * Adam de Boor.
7: *
8: * Redistribution and use in source and binary forms are permitted
9: * provided that: (1) source distributions retain this entire copyright
10: * notice and comment, and (2) distributions including binaries display
11: * the following acknowledgement: ``This product includes software
12: * developed by the University of California, Berkeley and its contributors''
13: * in the documentation or other materials provided with the distribution
14: * and in all advertising materials mentioning features or use of this
15: * software. Neither the name of the University nor the names of its
16: * contributors may be used to endorse or promote products derived
17: * from this software without specific prior written permission.
18: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
19: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
20: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
21: *
22: * @(#)lstInt.h 5.3 (Berkeley) 6/1/90
23: */
24:
25: /*-
26: * lstInt.h --
27: * Internals for the list library
28: */
29: #ifndef _LSTINT_H_
30: #define _LSTINT_H_
31:
32: #include "lst.h"
33:
34: typedef struct ListNode {
35: struct ListNode *prevPtr; /* previous element in list */
36: struct ListNode *nextPtr; /* next in list */
37: short useCount:8, /* Count of functions using the node.
38: * node may not be deleted until count
39: * goes to 0 */
40: flags:8; /* Node status flags */
41: ClientData datum; /* datum associated with this element */
42: } *ListNode;
43: /*
44: * Flags required for synchronization
45: */
46: #define LN_DELETED 0x0001 /* List node should be removed when done */
47:
48: #define NilListNode ((ListNode)-1)
49:
50: typedef enum {
51: Head, Middle, Tail, Unknown
52: } Where;
53:
54: typedef struct {
55: ListNode firstPtr; /* first node in list */
56: ListNode lastPtr; /* last node in list */
57: Boolean isCirc; /* true if the list should be considered
58: * circular */
59: /*
60: * fields for sequential access
61: */
62: Where atEnd; /* Where in the list the last access was */
63: Boolean isOpen; /* true if list has been Lst_Open'ed */
64: ListNode curPtr; /* current node, if open. NilListNode if
65: * *just* opened */
66: ListNode prevPtr; /* Previous node, if open. Used by
67: * Lst_Remove */
68: } *List;
69:
70: #define NilList ((List)-1)
71:
72: /*
73: * PAlloc (var, ptype) --
74: * Allocate a pointer-typedef structure 'ptype' into the variable 'var'
75: */
76: #define PAlloc(var,ptype) var = (ptype) Malloc (sizeof (*var))
77:
78: /*
79: * LstValid (l) --
80: * Return TRUE if the list l is valid
81: */
82: #define LstValid(l) (((Lst)l == NILLST) ? FALSE : TRUE)
83:
84: /*
85: * LstNodeValid (ln, l) --
86: * Return TRUE if the LstNode ln is valid with respect to l
87: */
88: #define LstNodeValid(ln, l) ((((LstNode)ln) == NILLNODE) ? FALSE : TRUE)
89:
90: /*
91: * LstIsEmpty (l) --
92: * TRUE if the list l is empty.
93: */
94: #define LstIsEmpty(l) (((List)l)->firstPtr == NilListNode)
95:
96: #endif _LSTINT_H_
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.