Mon 16 Mar 11:09:06 CET 2026
This commit is contained in:
parent
0b0de734f3
commit
0e8838b640
34
src/stack.h
Normal file
34
src/stack.h
Normal file
|
|
@ -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->sp<n
|
||||
#define SFULLN(S,n) (S->sp+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
|
||||
Loading…
Reference in New Issue
Block a user