1 /***********************************************************************
3 * This software is part of the ast package *
4 * Copyright (c) 1985-2010 AT&T Intellectual Property *
5 * and is licensed under the *
6 * Common Public License, Version 1.0 *
7 * by AT&T Intellectual Property *
9 * A copy of the License is available at *
10 * http://www.opensource.org/licenses/cpl1.0.txt *
11 * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
13 * Information and Software Systems Research *
17 * Glenn Fowler <gsf@research.att.com> *
18 * David Korn <dgk@research.att.com> *
19 * Phong Vo <kpv@research.att.com> *
21 ***********************************************************************/
27 * homogenous stack routine definitions
33 typedef struct stacktable
* STACK
; /* stack pointer */
34 typedef struct stackposition STACKPOS
; /* stack position */
36 struct stackblock
/* stack block cell */
38 void** stack
; /* actual stack */
39 struct stackblock
* prev
; /* previous block in list */
40 struct stackblock
* next
; /* next block in list */
43 struct stackposition
/* stack position */
45 struct stackblock
* block
; /* current block pointer */
46 int index
; /* index within current block */
49 struct stacktable
/* stack information */
51 struct stackblock
* blocks
; /* stack table blocks */
52 void* error
; /* error return value */
53 int size
; /* size of each block */
54 STACKPOS position
; /* current stack position */
58 * map old names to new
61 #define mkstack stackalloc
62 #define rmstack stackfree
63 #define clrstack stackclear
64 #define getstack stackget
65 #define pushstack stackpush
66 #define popstack stackpop
67 #define posstack stacktell
69 #if _BLD_ast && defined(__EXPORT__)
70 #define extern __EXPORT__
73 extern STACK
stackalloc(int, void*);
74 extern void stackfree(STACK
);
75 extern void stackclear(STACK
);
76 extern void* stackget(STACK
);
77 extern int stackpush(STACK
, void*);
78 extern int stackpop(STACK
);
79 extern void stacktell(STACK
, int, STACKPOS
*);