#ifndef _STACK_H #define _STACK_H #include "types.h" typedef struct { number_t *data; index_t size; index_t sp; } stack_t; /* Check for possible stack underflow (should normally not happen, in contrast to stack overflow) */ #if STACKUNDERFLOWCHECK>0 #define STACKUNDERFLOW(DS,N,R) if (SEMPTYN(DS,N)) { R->error=ESTACK; return 0; }; #else #define STACKUNDERFLOW(DS,N,R) #endif #define SEMPTY(S) S->sp==0 #define SFULL(S) S->sp==S->size #define SEMPTYN(S,n) S->spsp+n)>S->size #define POP(S) S->data[--S->sp] #define PUSH(S,x) S->data[S->sp++]=x #define NTH(S,n) S->data[S->sp-n] stack_t * StackAllocate(int size); void StackCopy(stack_t *src, stack_t *dst); void StackInit(stack_t *S,int size,number_t *data); void StackReset(stack_t *S); #endif