-/* type of a typed hash cell */
-typedef enum {
- xbt_cfgelm_int=0, xbt_cfgelm_double, xbt_cfgelm_string, xbt_cfgelm_host,
- xbt_cfgelm_type_count
-} e_xbt_cfgelm_type_t;
-
-/*----[ Memory management ]-----------------------------------------------*/
-xbt_cfg_t xbt_cfg_new (void);
-void xbt_cfg_cpy(xbt_cfg_t tocopy,
- /* OUT */ xbt_cfg_t *whereto);
-void xbt_cfg_free(xbt_cfg_t *cfg);
-void xbt_cfg_dump(const char *name,const char*indent,xbt_cfg_t cfg);
+/** @addtogroup XBT_config
+ * @brief Changing the configuration of SimGrid components (grounding feature)
+ *
+ * All modules of the SimGrid toolkit can be configured with this API.
+ * User modules and libraries can also use these facilities to handle their own configuration.
+ *
+ * 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.
+ *
+ * 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, during its initialization and
+ * user code then set and unset values.
+ *
+ * The easiest way to register a variable is to use the xbt_str_register_str function, which accepts a string
+ * representation of the config element descriptor. The syntax is the following:
+ * @verbatim <name>:<min nb>_to_<max nb>_<type>@endverbatim
+ *
+ * For example, <tt>size:1_to_1_int</tt> describes a variable called @e size which 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 <tt>outputfiles:0_to_10_string</tt> 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.
+ *
+ * @section XBT_cfg_ex Example of use
+ *
+ * TBD
+ */
+/** @defgroup XBT_cfg_use User interface: changing values
+ * @ingroup XBT_config
+ *
+ * This is the only interface you should use unless you want to let your own code become configurable with this.
+ *
+ * If the variable accept at most one value, those functions replace the current value with the provided one. If max>1,
+ * the provided value is appended to the list.
+ *
+ * string values are strdup'ed before use, so you can (and should) free your copy
+ *
+ * @{
+ */
+/** @brief Configuration set's data type is opaque. */
+#ifdef __cplusplus
+#include <xbt/config.hpp>
+typedef simgrid::config::Config* xbt_cfg_t;
+#else
+typedef void* xbt_cfg_t;
+#endif
+
+SG_BEGIN_DECL()
+
+XBT_ATTRIB_DEPRECATED_v323("Please use simgrid::config::set_parse") XBT_PUBLIC
+ void xbt_cfg_set_parse(const char* options);
+
+/* Set the value of the cell @a name in @a cfg with the provided value.*/
+XBT_ATTRIB_DEPRECATED_v323("Please use simgrid::config::set_value<int>") XBT_PUBLIC
+ void xbt_cfg_set_int(const char* name, int val);
+XBT_ATTRIB_DEPRECATED_v323("Please use simgrid::config::set_value<double>") XBT_PUBLIC
+ void xbt_cfg_set_double(const char* name, double val);
+XBT_ATTRIB_DEPRECATED_v323("Please use simgrid::config::set_value<bool>") XBT_PUBLIC
+ void xbt_cfg_set_boolean(const char* name, const char* val);
+XBT_ATTRIB_DEPRECATED_v323("Please use simgrid::config::set_value<std::string>") XBT_PUBLIC
+ void xbt_cfg_set_string(const char* name, const char* val);
+XBT_ATTRIB_DEPRECATED_v323("Please use simgrid::config::set_as_string") XBT_PUBLIC
+ void xbt_cfg_set_as_string(const char* name, const char* val);