/*
* brief: genericity programming
*
*/
#include <stdio.h>
#include <stdlib.h>
#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 ]; \
}
GENERIC_STACK( int, _int, 10 )
/* GENERIC_STACK( float, _float, 5 ) */
GENERIC_STACK( int, _int1, 10 )
int
main()
{
push_int( 5 );
push_int( 22 );
push_int( 15 );
push_int1( 4 );
push_int1( 23 );
push_int1( 16 );
/*push_float( 25.3 );
push_float( -40.5 );*/
while ( !is_empty_int() )
{
printf( "Popping %d\n", top_int() );
pop_int();
}
while ( !is_empty_int1() )
{
printf( "Popping %d\n", top_int1() );
pop_int1();
}
/*
while ( !is_empty_float() )
{
printf( "Popping %f\n", top_float() );
pop_float();
}*/
exit(0);
}