#ifndef R_STACK_H
#define R_STACK_H

#ifdef __cplusplus
extern "C" {
#endif

typedef void (*RStackFree)(void *ptr);

typedef struct r_stack_t {
	void **elems;
	unsigned int n_elems;
	int top;
	RStackFree free;
} RStack;

R_API RStack *r_stack_new(ut32 n);
R_API void r_stack_free(RStack *s);
R_API bool r_stack_is_empty(RStack *s);
R_API RStack *r_stack_newf(ut32 n, RStackFree f);
R_API int r_stack_push(RStack *s, void *el);
R_API void *r_stack_pop(RStack *s);
R_API unsigned int r_stack_size(RStack *s);
R_API void *r_stack_peek(RStack *s);

#ifdef __cplusplus
}
#endif

#endif //  R_STACK_H
