|
Using the generic macro API (C11 and later):
```c
#include
// Instantiating a set template.
#define NAME int_set
#define KEY_TY int
#include "verstable.h"
// Instantiating a map template.
#define NAME int_int_map
#define KEY_TY int
#define VAL_TY int
#include "verstable.h"
int main( void )
{
// Set.
int_set our_set;
vt_init( &our_set );
// Inserting keys.
for( int i = 0; i < 10; ++i )
{
int_set_itr itr = vt_insert( &our_set, i );
if( vt_is_end( itr ) )
{
// Out of memory, so abort.
vt_cleanup( &our_set );
return 1;
}
}
// Erasing keys.
for( int i = 0; i < 10; i += 3 )
vt_erase( &our_set, i );
// Retrieving keys.
for( int i = 0; i < 10; ++i )
{
int_set_itr itr = vt_get( &our_set, i );
if( !vt_is_end( itr ) )
printf( "%d ", itr.data->key );
}
// Printed: 1 2 4 5 7 8
// Iteration.
for(
int_set_itr itr = vt_first( &our_set );
!vt_is_end( itr );
itr = vt_next( itr )
)
printf( "%d ", itr.data->key );
// Printed: 2 4 7 1 5 8
vt_cleanup( &our_set );
// Map.
int_int_map our_map;
vt_init( &our_map );
// Inserting keys and values.
for( int i = 0; i < 10; ++i )
{
int_int_map_itr itr =
vt_insert( &our_map, i, i + 1 );
if( vt_is_end( itr ) )
{
// Out of memory, so abort.
vt_cleanup( &our_map );
return 1;
}
}
// Erasing keys and values.
for( int i = 0; i < 10; i += 3 )
vt_erase( &our_map, i );
// Retrieving keys and values.
for( int i = 0; i < 10; ++i )
{
int_int_map_itr itr = vt_get( &our_map, i );
if( !vt_is_end( itr ) )
printf(
"%d:%d ",
itr.data->key,
itr.data->val
);
}
// Printed: 1:2 2:3 4:5 5:6 7:8 8:9
// Iteration.
for(
int_int_map_itr itr = vt_first( &our_map );
!vt_is_end( itr );
itr = vt_next( itr )
)
printf(
"%d:%d ",
itr.data->key,
itr.data->val
);
// Printed: 2:3 4:5 7:8 1:2 5:6 8:9
vt_cleanup( &our_map );
}
```
|
Using the prefixed functions API (C99 and later):
```c
#include
// Instantiating a set template.
#define NAME int_set
#define KEY_TY int
#define HASH_FN vt_hash_integer
#define CMPR_FN vt_cmpr_integer
#include "verstable.h"
// Instantiating a map template.
#define NAME int_int_map
#define KEY_TY int
#define VAL_TY int
#define HASH_FN vt_hash_integer
#define CMPR_FN vt_cmpr_integer
#include "verstable.h"
int main( void )
{
// Set.
int_set our_set;
int_set_init( &our_set );
// Inserting keys.
for( int i = 0; i < 10; ++i )
{
int_set_itr itr =
int_set_insert( &our_set, i );
if( int_set_is_end( itr ) )
{
// Out of memory, so abort.
int_set_cleanup( &our_set );
return 1;
}
}
// Erasing keys.
for( int i = 0; i < 10; i += 3 )
int_set_erase( &our_set, i );
// Retrieving keys.
for( int i = 0; i < 10; ++i )
{
int_set_itr itr = int_set_get( &our_set, i );
if( !int_set_is_end( itr ) )
printf( "%d ", itr.data->key );
}
// Printed: 1 2 4 5 7 8
// Iteration.
for(
int_set_itr itr =
int_set_first( &our_set );
!int_set_is_end( itr );
itr = int_set_next( itr )
)
printf( "%d ", itr.data->key );
// Printed: 2 4 7 1 5 8
int_set_cleanup( &our_set );
// Map.
int_int_map our_map;
int_int_map_init( &our_map );
// Inserting keys and values.
for( int i = 0; i < 10; ++i )
{
int_int_map_itr itr =
int_int_map_insert( &our_map, i, i + 1 );
if( int_int_map_is_end( itr ) )
{
// Out of memory, so abort.
int_int_map_cleanup( &our_map );
return 1;
}
}
// Erasing keys and values.
for( int i = 0; i < 10; i += 3 )
int_int_map_erase( &our_map, i );
// Retrieving keys and values.
for( int i = 0; i < 10; ++i )
{
int_int_map_itr itr =
int_int_map_get( &our_map, i );
if( !int_int_map_is_end( itr ) )
printf(
"%d:%d ",
itr.data->key,
itr.data->val
);
}
// Printed: 1:2 2:3 4:5 5:6 7:8 8:9
// Iteration.
for(
int_int_map_itr itr =
int_int_map_first( &our_map );
!int_int_map_is_end( itr );
itr = int_int_map_next( itr )
)
printf(
"%d:%d ",
itr.data->key,
itr.data->val
);
// Printed: 2:3 4:5 7:8 1:2 5:6 8:9
int_int_map_cleanup( &our_map );
}
```
|