#ifndef __STACK_H__
#define __STACK_H__

typedef void * StackItem;

typedef struct Stack_tag {
  StackItem * pData;
  int top;
  int cursor;
} Stack, *pStack;

int stackInit(void);
Stack * stackCreate(StackItem * pStackData, int stackSize, boolean isEmpty);
int stackReturn(Stack * pReturnStack);

int stackPush(Stack * pStack, StackItem item);
int stackPop(Stack * pStack, StackItem * pPopItem);

StackItem stackTop(Stack * pStack); // look @ element on top
int stackGetSize(Stack * pStack);
int stackIsEmpty(Stack *pStack);

#endif /* __STACK_H__ */
