X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/707e365f2ebe9132b004da4995f4a705df9e5582..f497a65ba1f3ee297eb65e7ee1d3ca2d403223db:/include/xbt/config.h diff --git a/include/xbt/config.h b/include/xbt/config.h index ec201ab4ef..8227db6525 100644 --- a/include/xbt/config.h +++ b/include/xbt/config.h @@ -1,6 +1,6 @@ /* $Id$ */ -/* config - Dictionnary where the type of each cell is provided. */ +/* config - Dictionary where the type of each cell is provided. */ /* This is useful to build named structs, like option or property sets. */ @@ -22,10 +22,9 @@ BEGIN_DECL() * User modules and libraries can also use these facilities to handle * their own configuration. * - * A configuration set contain several \e variables which have a uniq name + * A configuration set contain several \e variables which have a unique name * in the set and can take a given type of value. For example, it may * contain a \a size variable, accepting \e int values. - * Moreover, of values. * * It is impossible to set a value to a variable which has not been registered before. * Usually, the module registers all the options it accepts in the configuration set, @@ -36,17 +35,15 @@ BEGIN_DECL() * is the following: \verbatim :_to__\endverbatim * * For example, size:1_to_1_int describes a variable called \e size which - * must take exactly one value, and the value being an integer. + * must take exactly one value, and the value being an integer. Set the maximum to 0 to + * disable the upper bound on data count. * * Another example could be outputfiles:0_to_10_string which describes a variable * called \e outputfiles and which can take between 0 and 10 strings as value. * * To some extend, configuration sets can be seen as typed hash structures. * - * \todo This great mecanism is not used in SimGrid yet... - * - * \todo We need a callback mecanism so that the configurable code get - * notified of configuration changes. + * \todo This great mechanism is not used in SimGrid yet... * * \section XBT_cfg_ex Example * @@ -90,8 +87,13 @@ BEGIN_DECL() xbt_cfgelm_double, /**< double */ xbt_cfgelm_string, /**< char* */ xbt_cfgelm_host, /**< both a char* (representing the hostname) and an integer (representing the port) */ + + xbt_cfgelm_any, /* not shown to users to prevent errors */ xbt_cfgelm_type_count } e_xbt_cfgelm_type_t; + + /** \brief Callback types. They get the name of the modified entry, and the position of the changed value */ + typedef void (*xbt_cfg_cb_t)(const char*, int); xbt_cfg_t xbt_cfg_new (void); void xbt_cfg_cpy(xbt_cfg_t tocopy, /* OUT */ xbt_cfg_t *whereto); @@ -115,37 +117,42 @@ BEGIN_DECL() * @{ */ - xbt_error_t xbt_cfg_set(xbt_cfg_t cfg, ...); - xbt_error_t xbt_cfg_set_vargs(xbt_cfg_t cfg, va_list pa); - xbt_error_t xbt_cfg_set_parse(xbt_cfg_t cfg, const char *options); + void xbt_cfg_set(xbt_cfg_t cfg, const char *name, ...); + void xbt_cfg_set_vargs(xbt_cfg_t cfg, const char *name, va_list pa); + void xbt_cfg_set_parse(xbt_cfg_t cfg, const char *options); /* Set the value of the cell \a name in \a cfg with the provided value. */ -xbt_error_t xbt_cfg_set_int (xbt_cfg_t cfg, const char *name, - int val); -xbt_error_t xbt_cfg_set_double(xbt_cfg_t cfg, const char *name, - double val); -xbt_error_t xbt_cfg_set_string(xbt_cfg_t cfg, const char *name, - const char *val); -xbt_error_t xbt_cfg_set_host (xbt_cfg_t cfg, const char *name, - const char *host,int port); +void xbt_cfg_set_int (xbt_cfg_t cfg, const char *name, + int val); +void xbt_cfg_set_double(xbt_cfg_t cfg, const char *name, + double val); +void xbt_cfg_set_string(xbt_cfg_t cfg, const char *name, + const char *val); +void xbt_cfg_set_host (xbt_cfg_t cfg, const char *name, + const char *host,int port); /* Remove the provided value from the cell @name in @cfg. */ -xbt_error_t xbt_cfg_rm_int (xbt_cfg_t cfg, const char *name, - int val); -xbt_error_t xbt_cfg_rm_double(xbt_cfg_t cfg, const char *name, - double val); -xbt_error_t xbt_cfg_rm_string(xbt_cfg_t cfg, const char *name, - const char *val); -xbt_error_t xbt_cfg_rm_host (xbt_cfg_t cfg, const char *name, - const char *host,int port); +void xbt_cfg_rm_int (xbt_cfg_t cfg, const char *name, + int val); +void xbt_cfg_rm_double(xbt_cfg_t cfg, const char *name, + double val); +void xbt_cfg_rm_string(xbt_cfg_t cfg, const char *name, + const char *val); +void xbt_cfg_rm_host (xbt_cfg_t cfg, const char *name, + const char *host,int port); + +/* + Remove the value at position \e pos from the config \e cfg + */ +void xbt_cfg_rm_at (xbt_cfg_t cfg, const char *name, int pos); /* rm every values */ -xbt_error_t xbt_cfg_empty(xbt_cfg_t cfg, const char *name); +void xbt_cfg_empty(xbt_cfg_t cfg, const char *name); /* @} */ /** @name 3. Registering stuff @@ -157,12 +164,12 @@ xbt_error_t xbt_cfg_empty(xbt_cfg_t cfg, const char *name); */ void xbt_cfg_register(xbt_cfg_t cfg, const char *name, e_xbt_cfgelm_type_t type, - int min, int max); - xbt_error_t xbt_cfg_unregister(xbt_cfg_t cfg, const char *name); + int min, int max, + xbt_cfg_cb_t cb_set, xbt_cfg_cb_t cb_rm); + void xbt_cfg_unregister(xbt_cfg_t cfg, const char *name); xbt_error_t xbt_cfg_register_str(xbt_cfg_t cfg, const char *entry); xbt_error_t xbt_cfg_check(xbt_cfg_t cfg); - xbt_error_t xbt_cfg_get_type(xbt_cfg_t cfg, const char *name, - /* OUT */ e_xbt_cfgelm_type_t *type); + e_xbt_cfgelm_type_t xbt_cfg_get_type(xbt_cfg_t cfg, const char *name); /* @} */ /** @name 4. Getting the stored values * @@ -170,16 +177,23 @@ xbt_error_t xbt_cfg_empty(xbt_cfg_t cfg, const char *name); * intended to configurable code, naturally. * * Note that those function return a pointer to the values actually stored - * in the set. Do not modify them unless you really know what you're doing. + * in the set. Do not modify them unless you really know what you're doing. + * Likewise, do not free the strings after use, they are not copy of the data, + * but the data themselves. * * @{ */ - xbt_error_t xbt_cfg_get_int (xbt_cfg_t cfg, const char *name, int *val); - xbt_error_t xbt_cfg_get_double(xbt_cfg_t cfg, const char *name, double *val); - xbt_error_t xbt_cfg_get_string(xbt_cfg_t cfg, const char *name, char **val); - xbt_error_t xbt_cfg_get_host (xbt_cfg_t cfg, const char *name, char **host, int *port); - xbt_error_t xbt_cfg_get_dynar (xbt_cfg_t cfg, const char *name, xbt_dynar_t *dynar); + int xbt_cfg_get_int (xbt_cfg_t cfg, const char *name); + double xbt_cfg_get_double(xbt_cfg_t cfg, const char *name); + char* xbt_cfg_get_string(xbt_cfg_t cfg, const char *name); + void xbt_cfg_get_host (xbt_cfg_t cfg, const char *name, char **host, int *port); + xbt_dynar_t xbt_cfg_get_dynar (xbt_cfg_t cfg, const char *name); + + int xbt_cfg_get_int_at (xbt_cfg_t cfg, const char *name, int pos); + double xbt_cfg_get_double_at(xbt_cfg_t cfg, const char *name, int pos); + char* xbt_cfg_get_string_at(xbt_cfg_t cfg, const char *name, int pos); + void xbt_cfg_get_host_at (xbt_cfg_t cfg, const char *name, int pos, char **host, int *port); /** @} */ /** @} */