int RFG_Regions_free( RFG_Regions* regions )
{
  int ret = 1;
  
  if( !regions )
    return 0;

  /* free objects for region filter and grouping */
 
  if( !RFG_Filter_free( regions->filter ) ) ret = 0;
  if( !RFG_Groups_free( regions->groups ) ) ret = 0;

  /* free call stack */

  free( regions->stack->entries );
  free( regions->stack );

  /* free hash tables for regions and call-path infos */

  region_info_hash_free( regions->region_infos );
  regions->num_region_infos = 0;
  cpath_info_hash_free( regions->cpath_infos );
  regions->num_cpath_infos = 0;

  /* free self */

  free( regions );
  regions = NULL;

  return ret;
}
int RFG_Regions_free( RFG_Regions* regions )
{
  int ret = 1;
  
  if( !regions ) return 0;

  /* free objects for region filter and grouping */
 
  if( !RFG_Filter_free( regions->filter ) ) ret = 0;
  if( !RFG_Groups_free( regions->groups ) ) ret = 0;

  /* free call stack */

  free( regions->stack->entries );
  free( regions->stack );

  /* free hash table */

  hash_free( regions->htab );

  /* free self */

  free( regions );
  regions = NULL;

  return ret;
}