VirtualBox

source: kBuild/trunk/src/kmk/lst.h@ 151

Last change on this file since 151 was 25, checked in by bird, 22 years ago

This commit was generated by cvs2svn to compensate for changes in r24,
which included commits to RCS files with non-trunk default branches.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.5 KB
Line 
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, with or without
11 * modification, are permitted provided that the following conditions
12 * are met:
13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in the
17 * documentation and/or other materials provided with the distribution.
18 * 3. All advertising materials mentioning features or use of this software
19 * must display the following acknowledgement:
20 * This product includes software developed by the University of
21 * California, Berkeley and its contributors.
22 * 4. Neither the name of the University nor the names of its contributors
23 * may be used to endorse or promote products derived from this software
24 * without specific prior written permission.
25 *
26 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
27 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
28 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
29 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
30 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
31 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
32 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
33 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
34 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
35 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36 * SUCH DAMAGE.
37 *
38 * from: @(#)lst.h 8.1 (Berkeley) 6/6/93
39 * $FreeBSD: src/usr.bin/make/lst.h,v 1.9 1999/08/28 01:03:32 peter Exp $
40 */
41
42/*-
43 * lst.h --
44 * Header for using the list library
45 */
46#ifndef _LST_H_
47#define _LST_H_
48
49#include <sys/param.h>
50#ifdef __STDC__
51#include <stdlib.h>
52#endif
53#include "sprite.h"
54
55/*
56 * basic typedef. This is what the Lst_ functions handle
57 */
58
59typedef struct Lst *Lst;
60typedef struct LstNode *LstNode;
61
62#define NILLST ((Lst) NIL)
63#define NILLNODE ((LstNode) NIL)
64
65/*
66 * NOFREE can be used as the freeProc to Lst_Destroy when the elements are
67 * not to be freed.
68 * NOCOPY performs similarly when given as the copyProc to Lst_Duplicate.
69 */
70#define NOFREE ((void (*) __P((ClientData))) 0)
71#define NOCOPY ((ClientData (*) __P((ClientData))) 0)
72
73#define LST_CONCNEW 0 /* create new LstNode's when using Lst_Concat */
74#define LST_CONCLINK 1 /* relink LstNode's when using Lst_Concat */
75
76/*
77 * Creation/destruction functions
78 */
79/* Create a new list */
80Lst Lst_Init __P((Boolean));
81/* Duplicate an existing list */
82Lst Lst_Duplicate __P((Lst, ClientData (*)(ClientData)));
83/* Destroy an old one */
84void Lst_Destroy __P((Lst, void (*)(ClientData)));
85/* True if list is empty */
86Boolean Lst_IsEmpty __P((Lst));
87
88/*
89 * Functions to modify a list
90 */
91/* Insert an element before another */
92ReturnStatus Lst_Insert __P((Lst, LstNode, ClientData));
93/* Insert an element after another */
94ReturnStatus Lst_Append __P((Lst, LstNode, ClientData));
95/* Place an element at the front of a lst. */
96ReturnStatus Lst_AtFront __P((Lst, ClientData));
97/* Place an element at the end of a lst. */
98ReturnStatus Lst_AtEnd __P((Lst, ClientData));
99/* Remove an element */
100ReturnStatus Lst_Remove __P((Lst, LstNode));
101/* Replace a node with a new value */
102ReturnStatus Lst_Replace __P((LstNode, ClientData));
103/* Concatenate two lists */
104ReturnStatus Lst_Concat __P((Lst, Lst, int));
105
106/*
107 * Node-specific functions
108 */
109/* Return first element in list */
110LstNode Lst_First __P((Lst));
111/* Return last element in list */
112LstNode Lst_Last __P((Lst));
113/* Return successor to given element */
114LstNode Lst_Succ __P((LstNode));
115/* Get datum from LstNode */
116ClientData Lst_Datum __P((LstNode));
117
118/*
119 * Functions for entire lists
120 */
121/* Find an element in a list */
122LstNode Lst_Find __P((Lst, ClientData,
123 int (*)(ClientData, ClientData)));
124/* Find an element starting from somewhere */
125LstNode Lst_FindFrom __P((Lst, LstNode, ClientData,
126 int (*cProc)(ClientData, ClientData)));
127/*
128 * See if the given datum is on the list. Returns the LstNode containing
129 * the datum
130 */
131LstNode Lst_Member __P((Lst, ClientData));
132/* Apply a function to all elements of a lst */
133void Lst_ForEach __P((Lst, int (*)(ClientData, ClientData),
134 ClientData));
135/*
136 * Apply a function to all elements of a lst starting from a certain point.
137 * If the list is circular, the application will wrap around to the
138 * beginning of the list again.
139 */
140void Lst_ForEachFrom __P((Lst, LstNode,
141 int (*)(ClientData, ClientData),
142 ClientData));
143/*
144 * these functions are for dealing with a list as a table, of sorts.
145 * An idea of the "current element" is kept and used by all the functions
146 * between Lst_Open() and Lst_Close().
147 */
148/* Open the list */
149ReturnStatus Lst_Open __P((Lst));
150/* Next element please */
151LstNode Lst_Next __P((Lst));
152/* Done yet? */
153Boolean Lst_IsAtEnd __P((Lst));
154/* Finish table access */
155void Lst_Close __P((Lst));
156
157/*
158 * for using the list as a queue
159 */
160/* Place an element at tail of queue */
161ReturnStatus Lst_EnQueue __P((Lst, ClientData));
162/* Remove an element from head of queue */
163ClientData Lst_DeQueue __P((Lst));
164
165#endif /* _LST_H_ */
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette