47 lines
1.4 KiB
C
47 lines
1.4 KiB
C
|
#ifndef __stack_h_
|
||
|
#define __stack_h_
|
||
|
|
||
|
/*
|
||
|
** Copyright 1994, Silicon Graphics, Inc.
|
||
|
** All Rights Reserved.
|
||
|
**
|
||
|
** This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
|
||
|
** the contents of this file may not be disclosed to third parties, copied or
|
||
|
** duplicated in any form, in whole or in part, without the prior written
|
||
|
** permission of Silicon Graphics, Inc.
|
||
|
**
|
||
|
** RESTRICTED RIGHTS LEGEND:
|
||
|
** Use, duplication or disclosure by the Government is subject to restrictions
|
||
|
** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
|
||
|
** and Computer Software clause at DFARS 252.227-7013, and/or in similar or
|
||
|
** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
|
||
|
** rights reserved under the Copyright Laws of the United States.
|
||
|
**
|
||
|
** Author: Eric Veach, July 1994.
|
||
|
*/
|
||
|
|
||
|
|
||
|
typedef struct Stack Stack;
|
||
|
|
||
|
struct Stack {
|
||
|
int size;
|
||
|
int max;
|
||
|
void **data;
|
||
|
};
|
||
|
|
||
|
Stack *__gl_StackNew( void );
|
||
|
void __gl_StackGrow( Stack *s );
|
||
|
void __gl_StackFree( Stack *s );
|
||
|
|
||
|
#define StackNew() __gl_StackNew()
|
||
|
#define StackFree(s) __gl_StackFree( s )
|
||
|
|
||
|
#define StackSize(s) ((s)->size)
|
||
|
#define StackPush(s,d) { if ((s)->size >= (s)->max) __gl_StackGrow( s ); \
|
||
|
(s)->data[((s)->size)++] = (d); }
|
||
|
#define StackPop(s) ((s)->data[--((s)->size)])
|
||
|
#define StackTop(s) ((s)->data[(s)->size - 1])
|
||
|
#define StackNth(s,n) ((s)->data[(s)->size - (n) - 1])
|
||
|
|
||
|
#endif
|