Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/lib/libast/include/stack.h
1810 views
1
/***********************************************************************
2
* *
3
* This software is part of the ast package *
4
* Copyright (c) 1985-2011 AT&T Intellectual Property *
5
* and is licensed under the *
6
* Eclipse Public License, Version 1.0 *
7
* by AT&T Intellectual Property *
8
* *
9
* A copy of the License is available at *
10
* http://www.eclipse.org/org/documents/epl-v10.html *
11
* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
12
* *
13
* Information and Software Systems Research *
14
* AT&T Research *
15
* Florham Park NJ *
16
* *
17
* Glenn Fowler <[email protected]> *
18
* David Korn <[email protected]> *
19
* Phong Vo <[email protected]> *
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
33
typedef struct stacktable* STACK; /* stack pointer */
34
typedef struct stackposition STACKPOS; /* stack position */
35
36
struct 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
43
struct stackposition /* stack position */
44
{
45
struct stackblock* block; /* current block pointer */
46
int index; /* index within current block */
47
};
48
49
struct 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
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*);
80
81
#undef extern
82
83
#endif
84
85