1/***********************************************************************
2*                                                                      *
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                     *
8*                                                                      *
9*                A copy of the License is available at                 *
10*            http://www.opensource.org/licenses/cpl1.0.txt             *
11*         (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9)         *
12*                                                                      *
13*              Information and Software Systems Research               *
14*                            AT&T Research                             *
15*                           Florham Park NJ                            *
16*                                                                      *
17*                 Glenn Fowler <gsf@research.att.com>                  *
18*                  David Korn <dgk@research.att.com>                   *
19*                   Phong Vo <kpv@research.att.com>                    *
20*                                                                      *
21***********************************************************************/
22#pragma prototyped
23/*
24 * Glenn Fowler
25 * AT&T Research
26 *
27 * homogenous stack routine definitions
28 */
29
30#ifndef _STACK_H
31#define _STACK_H
32
33typedef struct stacktable* STACK;	/* stack pointer		*/
34typedef struct stackposition STACKPOS;	/* stack position		*/
35
36struct stackblock			/* stack block cell		*/
37{
38	void**		  stack;	/* actual stack			*/
39	struct stackblock* prev;	/* previous block in list	*/
40	struct stackblock* next;	/* next block in list		*/
41};
42
43struct stackposition			/* stack position		*/
44{
45	struct stackblock* block;	/* current block pointer	*/
46	int		index;		/* index within current block	*/
47};
48
49struct stacktable			/* stack information		*/
50{
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	*/
55};
56
57/*
58 * map old names to new
59 */
60
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
68
69#if _BLD_ast && defined(__EXPORT__)
70#define extern		__EXPORT__
71#endif
72
73extern STACK		stackalloc(int, void*);
74extern void		stackfree(STACK);
75extern void		stackclear(STACK);
76extern void*		stackget(STACK);
77extern int		stackpush(STACK, void*);
78extern int		stackpop(STACK);
79extern void		stacktell(STACK, int, STACKPOS*);
80
81#undef	extern
82
83#endif
84