RFG_Regions* RFG_Regions_init()
{
  RFG_Regions* ret;

  /* allocate memory for RFG regions object */

  if( !( ret = ( RFG_Regions* )calloc( 1, sizeof( RFG_Regions ) ) ) )
    return NULL;

  /* initialize call stack */

  if( !stack_init( &(ret->stack) ) )
  {
    free( ret );
    return NULL;
  }

  /* initialize RFG filter object */

  if( !( ret->filter = RFG_Filter_init() ) )
  {
    free( ret );
    return NULL;
  }

  /* initialize RFG groups object */

  if( !( ret->groups = RFG_Groups_init() ) )
  {
    free( ret );
    return NULL;
  }

  return ret;
}
RFG_Regions* RFG_Regions_init()
{
  RFG_Regions* ret;

  uint32_t i;

  /* allocate memory for RFG regions object */

  ret = ( RFG_Regions* )malloc( sizeof( RFG_Regions ) );
  if( ret == NULL )
    return NULL;

  /* initalize hash table */

  for( i = 0; i < HASH_MAX; i++ )
    ret->htab[i] = NULL;

  /* initialize call stack */

  ret->stack = NULL;
  if( !stack_init( &(ret->stack) ) )
  {
    free( ret );
    return NULL;
  }

  /* initialize RFG filter object */
  
  ret->filter = NULL;
  ret->filter = RFG_Filter_init();
  if( !ret->filter )
  {
     free( ret );
     return NULL;
  }

  /* initialize RFG groups object */

  ret->groups = NULL;
  ret->groups = RFG_Groups_init();
  if( !ret->groups )
  {
     free( ret );
     return NULL;
  }

  return ret;
}