1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
 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);
 }