1313 * Copyright (c) 2008-2013 Cisco Systems, Inc.  All rights reserved. 
1414 * Copyright (c) 2012-2015 Los Alamos National Security, LLC. All rights 
1515 *                         reserved. 
16+  * Copyright (c) 2017      Research Organization for Information Science 
17+  *                         and Technology (RIST). All rights reserved. 
1618 * $COPYRIGHT$ 
1719 * 
1820 * Additional copyrights may follow 
@@ -330,6 +332,7 @@ int mca_base_var_group_deregister (int group_index)
330332    mca_base_var_group_t  * group ;
331333    int  size , ret ;
332334    int  * params , * subgroups ;
335+     opal_object_t  * *  enums ;
333336
334337    ret  =  mca_base_var_group_get_internal  (group_index , & group , false);
335338    if  (OPAL_SUCCESS  !=  ret ) {
@@ -368,6 +371,12 @@ int mca_base_var_group_deregister (int group_index)
368371        (void ) mca_base_pvar_mark_invalid  (params [i ]);
369372    }
370373
374+     size  =  opal_value_array_get_size (& group -> group_enums );
375+     enums  =  OPAL_VALUE_ARRAY_GET_BASE (& group -> group_enums , opal_object_t  * );
376+     for  (int  i  =  0  ; i  <  size  ; ++ i ) {
377+         OBJ_RELEASE  (enums [i ]);
378+     }
379+ 
371380    size  =  opal_value_array_get_size (& group -> group_subgroups );
372381    subgroups  =  OPAL_VALUE_ARRAY_GET_BASE (& group -> group_subgroups , int );
373382    for  (int  i  =  0  ; i  <  size  ; ++ i ) {
@@ -453,6 +462,34 @@ int mca_base_var_group_add_pvar (const int group_index, const int param_index)
453462    return  (int ) opal_value_array_get_size  (& group -> group_pvars ) -  1 ;
454463}
455464
465+ int  mca_base_var_group_add_enum  (const  int  group_index , const  void  *  storage )
466+ {
467+     mca_base_var_group_t  * group ;
468+     int  size , i , ret ;
469+     void  * * params ;
470+ 
471+     ret  =  mca_base_var_group_get_internal  (group_index , & group , false);
472+     if  (OPAL_SUCCESS  !=  ret ) {
473+         return  ret ;
474+     }
475+ 
476+     size  =  opal_value_array_get_size (& group -> group_enums );
477+     params  =  OPAL_VALUE_ARRAY_GET_BASE (& group -> group_enums , void  * );
478+     for  (i  =  0  ; i  <  size  ; ++ i ) {
479+         if  (params [i ] ==  storage ) {
480+             return  i ;
481+         }
482+     }
483+ 
484+     if  (OPAL_SUCCESS  != 
485+         (ret  =  opal_value_array_append_item  (& group -> group_enums , storage ))) {
486+         return  ret ;
487+     }
488+ 
489+     /* return the group index */ 
490+     return  (int ) opal_value_array_get_size  (& group -> group_enums ) -  1 ;
491+ }
492+ 
456493int  mca_base_var_group_get  (const  int  group_index , const  mca_base_var_group_t  * * group )
457494{
458495    return  mca_base_var_group_get_internal  (group_index , (mca_base_var_group_t  * * ) group , false);
@@ -495,6 +532,9 @@ static void mca_base_var_group_constructor (mca_base_var_group_t *group)
495532
496533    OBJ_CONSTRUCT (& group -> group_pvars , opal_value_array_t );
497534    opal_value_array_init  (& group -> group_pvars , sizeof  (int ));
535+ 
536+     OBJ_CONSTRUCT (& group -> group_enums , opal_value_array_t );
537+     opal_value_array_init  (& group -> group_enums , sizeof (void  * ));
498538}
499539
500540static  void  mca_base_var_group_destructor  (mca_base_var_group_t  * group )
@@ -517,6 +557,7 @@ static void mca_base_var_group_destructor (mca_base_var_group_t *group)
517557    OBJ_DESTRUCT (& group -> group_subgroups );
518558    OBJ_DESTRUCT (& group -> group_vars );
519559    OBJ_DESTRUCT (& group -> group_pvars );
560+     OBJ_DESTRUCT (& group -> group_enums );
520561}
521562
522563int  mca_base_var_group_get_count  (void )
0 commit comments