From 0e8838b64000a59463ae817488b1ebae9828b55c Mon Sep 17 00:00:00 2001 From: sbosse Date: Mon, 16 Mar 2026 11:10:14 +0100 Subject: [PATCH] Mon 16 Mar 11:09:06 CET 2026 --- src/stack.h | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/stack.h diff --git a/src/stack.h b/src/stack.h new file mode 100644 index 0000000..d2e5a56 --- /dev/null +++ b/src/stack.h @@ -0,0 +1,34 @@ +#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