|
|
1.1 root 1: /*
2: * Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
3: * Copyright (c) 1988, 1989 by Adam de Boor
4: * Copyright (c) 1989 by Berkeley Softworks
5: * All rights reserved.
6: *
7: * This code is derived from software contributed to Berkeley by
8: * Adam de Boor.
9: *
10: * Redistribution and use in source and binary forms are permitted
11: * provided that: (1) source distributions retain this entire copyright
12: * notice and comment, and (2) distributions including binaries display
13: * the following acknowledgement: ``This product includes software
14: * developed by the University of California, Berkeley and its contributors''
15: * in the documentation or other materials provided with the distribution
16: * and in all advertising materials mentioning features or use of this
17: * software. Neither the name of the University nor the names of its
18: * contributors may be used to endorse or promote products derived
19: * from this software without specific prior written permission.
20: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
21: * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
22: * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
23: *
24: * @(#)lst.h 5.3 (Berkeley) 6/1/90
25: */
26:
27: /*-
28: * lst.h --
29: * Header for using the list library
30: */
31: #ifndef _LST_H_
32: #define _LST_H_
33:
34: #include <sprite.h>
35:
36: /*
37: * basic typedef. This is what the Lst_ functions handle
38: */
39:
40: typedef struct Lst *Lst;
41: typedef struct LstNode *LstNode;
42:
43: #define NILLST ((Lst) NIL)
44: #define NILLNODE ((LstNode) NIL)
45:
46: /*
47: * NOFREE can be used as the freeProc to Lst_Destroy when the elements are
48: * not to be freed.
49: * NOCOPY performs similarly when given as the copyProc to Lst_Duplicate.
50: */
51: #define NOFREE ((void (*)()) 0)
52: #define NOCOPY ((ClientData (*)()) 0)
53:
54: #define LST_CONCNEW 0 /* create new LstNode's when using Lst_Concat */
55: #define LST_CONCLINK 1 /* relink LstNode's when using Lst_Concat */
56:
57: /*
58: * Creation/destruction functions
59: */
60: Lst Lst_Init(); /* Create a new list */
61: Lst Lst_Duplicate(); /* Duplicate an existing list */
62: void Lst_Destroy(); /* Destroy an old one */
63:
64: int Lst_Length(); /* Find the length of a list */
65: Boolean Lst_IsEmpty(); /* True if list is empty */
66:
67: /*
68: * Functions to modify a list
69: */
70: ReturnStatus Lst_Insert(); /* Insert an element before another */
71: ReturnStatus Lst_Append(); /* Insert an element after another */
72: ReturnStatus Lst_AtFront(); /* Place an element at the front of
73: * a lst. */
74: ReturnStatus Lst_AtEnd(); /* Place an element at the end of a
75: * lst. */
76: ReturnStatus Lst_Remove(); /* Remove an element */
77: ReturnStatus Lst_Replace(); /* Replace a node with a new value */
78: ReturnStatus Lst_Move(); /* Move an element to another place */
79: ReturnStatus Lst_Concat(); /* Concatenate two lists */
80:
81: /*
82: * Node-specific functions
83: */
84: LstNode Lst_First(); /* Return first element in list */
85: LstNode Lst_Last(); /* Return last element in list */
86: LstNode Lst_Succ(); /* Return successor to given element */
87: LstNode Lst_Pred(); /* Return predecessor to given
88: * element */
89: ClientData Lst_Datum(); /* Get datum from LstNode */
90:
91: /*
92: * Functions for entire lists
93: */
94: LstNode Lst_Find(); /* Find an element in a list */
95: LstNode Lst_FindFrom(); /* Find an element starting from
96: * somewhere */
97: LstNode Lst_Member(); /* See if the given datum is on the
98: * list. Returns the LstNode containing
99: * the datum */
100: int Lst_Index(); /* Returns the index of a datum in the
101: * list, starting from 0 */
102: void Lst_ForEach(); /* Apply a function to all elements of
103: * a lst */
104: void Lst_ForEachFrom(); /* Apply a function to all elements of
105: * a lst starting from a certain point.
106: * If the list is circular, the
107: * application will wrap around to the
108: * beginning of the list again. */
109: /*
110: * these functions are for dealing with a list as a table, of sorts.
111: * An idea of the "current element" is kept and used by all the functions
112: * between Lst_Open() and Lst_Close().
113: */
114: ReturnStatus Lst_Open(); /* Open the list */
115: LstNode Lst_Prev(); /* Previous element */
116: LstNode Lst_Cur(); /* The current element, please */
117: LstNode Lst_Next(); /* Next element please */
118: Boolean Lst_IsAtEnd(); /* Done yet? */
119: void Lst_Close(); /* Finish table access */
120:
121: /*
122: * for using the list as a queue
123: */
124: ReturnStatus Lst_EnQueue(); /* Place an element at tail of queue */
125: ClientData Lst_DeQueue(); /* Remove an element from head of
126: * queue */
127:
128: #endif _LST_H_
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.