1111 * Copyright (c) 2004-2005 The Regents of the University of California.
1212 * All rights reserved.
1313 * Copyright (c) 2008-2013 Cisco Systems, Inc. All rights reserved.
14- * Copyright (c) 2012-2014 Los Alamos National Security, LLC. All rights
14+ * Copyright (c) 2012-2015 Los Alamos National Security, LLC. All rights
1515 * reserved.
1616 * $COPYRIGHT$
1717 *
2323#include "opal_config.h"
2424
2525#include "opal/mca/base/mca_base_var_enum.h"
26+ #include "opal/mca/base/base.h"
2627
2728#include <stdio.h>
2829#include <string.h>
@@ -33,6 +34,10 @@ static void mca_base_var_enum_destructor (mca_base_var_enum_t *enumerator);
3334OBJ_CLASS_INSTANCE (mca_base_var_enum_t , opal_object_t , mca_base_var_enum_constructor ,
3435 mca_base_var_enum_destructor );
3536
37+ static int enum_dump (mca_base_var_enum_t * self , char * * out );
38+ static int enum_get_count (mca_base_var_enum_t * self , int * count );
39+ static int enum_get_value (mca_base_var_enum_t * self , int index , int * value , const char * * string_value );
40+
3641static int mca_base_var_enum_bool_get_count (mca_base_var_enum_t * enumerator , int * count )
3742{
3843 * count = 2 ;
@@ -97,6 +102,7 @@ static int mca_base_var_enum_bool_dump (mca_base_var_enum_t *self, char **out)
97102
98103mca_base_var_enum_t mca_base_var_enum_bool = {
99104 .super = OPAL_OBJ_STATIC_INIT (opal_object_t ),
105+ .enum_is_static = true,
100106 .enum_name = "boolean" ,
101107 .get_count = mca_base_var_enum_bool_get_count ,
102108 .get_value = mca_base_var_enum_bool_get_value ,
@@ -105,6 +111,108 @@ mca_base_var_enum_t mca_base_var_enum_bool = {
105111 .dump = mca_base_var_enum_bool_dump
106112};
107113
114+ /* verbosity enumerator */
115+ static mca_base_var_enum_value_t verbose_values [] = {
116+ {MCA_BASE_VERBOSE_NONE , "none" },
117+ {MCA_BASE_VERBOSE_ERROR , "error" },
118+ {MCA_BASE_VERBOSE_COMPONENT , "component" },
119+ {MCA_BASE_VERBOSE_WARN , "warn" },
120+ {MCA_BASE_VERBOSE_INFO , "info" },
121+ {MCA_BASE_VERBOSE_TRACE , "trace" },
122+ {MCA_BASE_VERBOSE_DEBUG , "debug" },
123+ {MCA_BASE_VERBOSE_MAX , "max" },
124+ {-1 , NULL }
125+ };
126+
127+ static int mca_base_var_enum_verbose_vfs (mca_base_var_enum_t * self , const char * string_value ,
128+ int * value )
129+ {
130+ char * tmp ;
131+ int v ;
132+
133+ /* skip whitespace */
134+ string_value += strspn (string_value , " \t\n\v\f\r" );
135+
136+ v = strtol (string_value , & tmp , 10 );
137+ if (* tmp != '\0' ) {
138+ for (int i = 0 ; verbose_values [i ].string ; ++ i ) {
139+ if (0 == strcmp (verbose_values [i ].string , string_value )) {
140+ * value = verbose_values [i ].value ;
141+ return OPAL_SUCCESS ;
142+ }
143+ }
144+
145+ return OPAL_ERR_NOT_FOUND ;
146+ } else if (v < MCA_BASE_VERBOSE_NONE ) {
147+ v = MCA_BASE_VERBOSE_NONE ;
148+ } else if (v > MCA_BASE_VERBOSE_MAX ) {
149+ v = MCA_BASE_VERBOSE_MAX ;
150+ }
151+
152+ * value = v ;
153+
154+ return OPAL_SUCCESS ;
155+ }
156+
157+ static int mca_base_var_enum_verbose_sfv (mca_base_var_enum_t * self , const int value ,
158+ const char * * string_value )
159+ {
160+ static char buffer [4 ];
161+
162+ if (value < 0 || value > 100 ) {
163+ return OPAL_ERR_VALUE_OUT_OF_BOUNDS ;
164+ }
165+
166+ for (int i = 0 ; verbose_values [i ].string ; ++ i ) {
167+ if (verbose_values [i ].value == value ) {
168+ * string_value = verbose_values [i ].string ;
169+ return OPAL_SUCCESS ;
170+ }
171+ }
172+
173+ snprintf (buffer , 4 , "%d" , value );
174+ if (string_value ) {
175+ * string_value = buffer ;
176+ }
177+
178+ return OPAL_SUCCESS ;
179+ }
180+
181+ static int mca_base_var_enum_verbose_dump (mca_base_var_enum_t * self , char * * out )
182+ {
183+ char * tmp ;
184+ int ret ;
185+
186+ ret = enum_dump (self , out );
187+ if (OPAL_SUCCESS != ret ) {
188+ return ret ;
189+ }
190+
191+ ret = asprintf (& tmp , "%s, 0 - 100" , * out );
192+ free (* out );
193+ if (0 > ret ) {
194+ * out = NULL ;
195+ return OPAL_ERR_OUT_OF_RESOURCE ;
196+ }
197+
198+ * out = tmp ;
199+
200+ return OPAL_SUCCESS ;
201+ }
202+
203+ mca_base_var_enum_t mca_base_var_enum_verbose = {
204+ .super = OPAL_OBJ_STATIC_INIT (opal_object_t ),
205+ .enum_is_static = true,
206+ .enum_name = "verbosity" ,
207+ .get_count = enum_get_count ,
208+ .get_value = enum_get_value ,
209+ .value_from_string = mca_base_var_enum_verbose_vfs ,
210+ .string_from_value = mca_base_var_enum_verbose_sfv ,
211+ .dump = mca_base_var_enum_verbose_dump ,
212+ .enum_value_count = 8 ,
213+ .enum_values = verbose_values ,
214+ };
215+
108216
109217int mca_base_var_enum_create (const char * name , const mca_base_var_enum_value_t * values , mca_base_var_enum_t * * enumerator )
110218{
@@ -264,6 +372,7 @@ static void mca_base_var_enum_constructor (mca_base_var_enum_t *enumerator)
264372 enumerator -> value_from_string = enum_value_from_string ;
265373 enumerator -> string_from_value = enum_string_from_value ;
266374 enumerator -> dump = enum_dump ;
375+ enumerator -> enum_is_static = false;
267376}
268377
269378static void mca_base_var_enum_destructor (mca_base_var_enum_t * enumerator )
0 commit comments