summaryrefslogtreecommitdiff
path: root/usr/src/lib/libast/common/include/stack.h
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib/libast/common/include/stack.h')
-rw-r--r--usr/src/lib/libast/common/include/stack.h83
1 files changed, 83 insertions, 0 deletions
diff --git a/usr/src/lib/libast/common/include/stack.h b/usr/src/lib/libast/common/include/stack.h
new file mode 100644
index 0000000000..4ca2de0cf4
--- /dev/null
+++ b/usr/src/lib/libast/common/include/stack.h
@@ -0,0 +1,83 @@
+/***********************************************************************
+* *
+* This software is part of the ast package *
+* Copyright (c) 1985-2007 AT&T Knowledge Ventures *
+* and is licensed under the *
+* Common Public License, Version 1.0 *
+* by AT&T Knowledge Ventures *
+* *
+* A copy of the License is available at *
+* http://www.opensource.org/licenses/cpl1.0.txt *
+* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
+* *
+* Information and Software Systems Research *
+* AT&T Research *
+* Florham Park NJ *
+* *
+* Glenn Fowler <gsf@research.att.com> *
+* David Korn <dgk@research.att.com> *
+* Phong Vo <kpv@research.att.com> *
+* *
+***********************************************************************/
+#pragma prototyped
+/*
+ * Glenn Fowler
+ * AT&T Research
+ *
+ * homogenous stack routine definitions
+ */
+
+#ifndef _STACK_H
+#define _STACK_H
+
+typedef struct stacktable* STACK; /* stack pointer */
+typedef struct stackposition STACKPOS; /* stack position */
+
+struct stackblock /* stack block cell */
+{
+ void** stack; /* actual stack */
+ struct stackblock* prev; /* previous block in list */
+ struct stackblock* next; /* next block in list */
+};
+
+struct stackposition /* stack position */
+{
+ struct stackblock* block; /* current block pointer */
+ int index; /* index within current block */
+};
+
+struct stacktable /* stack information */
+{
+ struct stackblock* blocks; /* stack table blocks */
+ void* error; /* error return value */
+ int size; /* size of each block */
+ STACKPOS position; /* current stack position */
+};
+
+/*
+ * map old names to new
+ */
+
+#define mkstack stackalloc
+#define rmstack stackfree
+#define clrstack stackclear
+#define getstack stackget
+#define pushstack stackpush
+#define popstack stackpop
+#define posstack stacktell
+
+#if _BLD_ast && defined(__EXPORT__)
+#define extern __EXPORT__
+#endif
+
+extern STACK stackalloc(int, void*);
+extern void stackfree(STACK);
+extern void stackclear(STACK);
+extern void* stackget(STACK);
+extern int stackpush(STACK, void*);
+extern int stackpop(STACK);
+extern void stacktell(STACK, int, STACKPOS*);
+
+#undef extern
+
+#endif