#define GRAS_DATADESC_H
#include "xbt/misc.h" /* BEGIN_DECL */
+#include "xbt/dynar.h" /* void_f_pvoid_t */
BEGIN_DECL()
* -# Callback Persistant State: Simple push/pop mechanism
* -# Callback Persistant State: Full featured mechanism
*/
-/*@{*/
+/* @{*/
/** @name 1. basic operations
*
* (comma separates macro args).
*
* For example, change \verbatim int a, b;\endverbatim to \verbatim int a;
- int b:\endverbatim
+ int b;\endverbatim
*/
/** @{ */
*/
#define GRAS_ANNOTE(key,val)
-/*@}*/
+/* @} */
gras_datadesc_type_t
gras_datadesc_parse(const char *name, const char *C_statement);
[Use my_type to send pointers to mystruct data]\endverbatim
*/
-/*@{*/
+/* @{ */
/** \brief Opaque type describing a type description callback persistant state. */
/* callbacks prototypes */
/** \brief Prototype of type callbacks returning nothing. */
-typedef void (*gras_datadesc_type_cb_void_t)(gras_cbps_t vars, void *data);
+typedef void (*gras_datadesc_type_cb_void_t)(gras_datadesc_type_t typedesc, gras_cbps_t vars, void *data);
/** \brief Prototype of type callbacks returning an int. */
-typedef int (*gras_datadesc_type_cb_int_t)(gras_cbps_t vars, void *data);
+typedef int (*gras_datadesc_type_cb_int_t)(gras_datadesc_type_t typedesc, gras_cbps_t vars, void *data);
/** \brief Prototype of type callbacks selecting a type. */
-typedef gras_datadesc_type_t (*gras_datadesc_selector_t)(gras_cbps_t vars, void *data);
+typedef gras_datadesc_type_t (*gras_datadesc_selector_t)(gras_datadesc_type_t typedesc, gras_cbps_t vars, void *data);
/******************************************
gras_datadesc_type_t
gras_datadesc_ref_pop_arr(gras_datadesc_type_t element_type);
+gras_datadesc_type_t
+ gras_datadesc_dynar(gras_datadesc_type_t elm_t,
+ void_f_pvoid_t *free_func);
+
/*********************************
* Change stuff within datadescs *
*********************************/
* Get stuff within datadescs *
******************************/
/** \brief Returns the name of a datadescription */
-char * gras_datadesc_get_name(gras_datadesc_type_t ddt);
+const char * gras_datadesc_get_name(gras_datadesc_type_t ddt);
/** \brief Returns the identifier of a datadescription */
int gras_datadesc_get_id(gras_datadesc_type_t ddt);
-/*@}*/
+/* @} */
/** @name 4. Callback Persistant State: Simple push/pop mechanism
*
\endverbatim
*/
-/*@{*/
+/* @{ */
void
gras_cbps_i_push(gras_cbps_t ps, int val);
int
gras_cbps_i_pop(gras_cbps_t ps);
-int gras_datadesc_cb_pop(gras_cbps_t vars, void *data);
-void gras_datadesc_cb_push_int(gras_cbps_t vars, void *data);
-void gras_datadesc_cb_push_uint(gras_cbps_t vars, void *data);
-void gras_datadesc_cb_push_lint(gras_cbps_t vars, void *data);
-void gras_datadesc_cb_push_ulint(gras_cbps_t vars, void *data);
+int gras_datadesc_cb_pop(gras_datadesc_type_t typedesc, gras_cbps_t vars, void *data);
+void gras_datadesc_cb_push_int(gras_datadesc_type_t typedesc, gras_cbps_t vars, void *data);
+void gras_datadesc_cb_push_uint(gras_datadesc_type_t typedesc, gras_cbps_t vars, void *data);
+void gras_datadesc_cb_push_lint(gras_datadesc_type_t typedesc, gras_cbps_t vars, void *data);
+void gras_datadesc_cb_push_ulint(gras_datadesc_type_t typedesc, gras_cbps_t vars, void *data);
-/*@}*/
+/* @} */
/** @name 5. Callback Persistant State: Full featured mechanism
*
* introduced in previous section isn't enough, you can always use this full featured one.
*/
-/*@{*/
+/* @{ */
xbt_error_t
gras_cbps_v_pop (gras_cbps_t ps,
gras_cbps_block_end(gras_cbps_t ps);
/* @} */
-/*@}*/
+/* @} */
/*******************************