#include"g_stack.h"
GENERIC_STACK(int,_int,10)
GENERIC_STACK(float,_float,5)
int main()
{push_int(5);
push_int(22);
push_int(15);
push_float(25.3);
push_float(-40.3);
while(!is_empty_int())
{
printf("popping%d\n",top_int());
pop_int();
}
while(!is_empty_float())
{
printf("popping%f\n",top_float());
pop_float();
}
return EXIT_SUCCESS;
}
/*********************************************************************************************/
#include<assert.h>
#define GENERIC_STACK(STACK_TYPE, SUFFIX, STACK_SIZE)\
static STACK_TYPE stack##SUFFIX[STACK_SIZE];\
static int top_element##SUFFIX=-1;\
\
int is_empty##SUFFIX(void)\
{\
return top_element##SUFFIX==-1;\
}\
int is_full##SUFFIX(void)\
{\
return top_element##SUFFIX==STACK_SIZE-1;\
}\
void push##SUFFIX(STACK_TYPE value)\
{\
assert(!is_full##SUFFIX());\
top_element##SUFFIX+=1;\
stack##SUFFIX[top_element##SUFFIX]=value;\
}\
void pop##SUFFIX(void)\
{\
assert(!is_empty##SUFFIX());\
top_element##SUFFIX-=1;\
}\
STACK_TYPE top##SUFFIX(void)\
{ \
assert(!is_empty##SUFFIX());\
return stack##SUFFIX[top_element##SUFFIX];\
}