int
saf_find_state_groups(SAF_ParMode pmode, /* The parallel mode. */
SAF_Suite *suite, /* The suite within which to search. */
const char *name, /* The name of the state group for which to search. Pass SAF_ANY_NAME
* if you do not want to limit your search. */
int *num_state_grps, /* [OUT] Returned number of state groups found. */
SAF_StateGrp **state_grps /* [OUT] Returned state groups found. */
)
{
SAF_ENTER(saf_find_state_groups, SAF_PRECONDITION_ERROR);
SAF_Db db=SS_FILE_NULL;
/*SAF_Role stategrp_role;*/
int found = 0;
SAF_Cat stategrp_cat;
/* get and set the database and db handles */
ss_pers_file((ss_pers_t*)suite, &db);
/* stategrp_role = saf_find_one_role( database, "stategroup_role" ); */
/* stategrp_cats = NULL; */
/* saf_find_categories( suite, "stategroups", SAF_ANY_ROLE, SAF_ANY_TOPODIM, &num_cats, &stategrp_cats); */
{
int l_numFound = 0, i;
SAF_Cat *l_collsFound = NULL;
saf_find_collections(pmode, suite, SAF_TOPOLOGY, SAF_CELLTYPE_ANY,
SAF_ANY_TOPODIM, SAF_DECOMP_TORF,
&l_numFound, &l_collsFound);
for(i=0;i<l_numFound;i++) {
char *l_name=0;
saf_describe_category(SAF_ALL, l_collsFound+i, &l_name, NULL, NULL );
if( !strcmp(l_name,"stategroups") ) {
found=1;
stategrp_cat = l_collsFound[i];
_saf_free(l_name);
break;
}
_saf_free(l_name);
}
if( l_collsFound != NULL )
free(l_collsFound);
}
if( found == 0 ) {
if (num_state_grps != NULL)
*num_state_grps = 0;
if (state_grps != NULL)
*state_grps = NULL;
return SAF_SUCCESS;
}
else {
saf_find_fields( pmode, &db, suite, name, NULL, SAF_ALGTYPE_ANY, SAF_ANY_BASIS, SAF_ANY_UNIT,
&stategrp_cat, SAF_ANY_RATIO, SAF_ANY_CAT, SAF_ANY_EFUNC, num_state_grps, state_grps);
}
SAF_LEAVE(SAF_SUCCESS);
}