X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/75ffa801579aeb214b8d95290b76c96a605a2422..d48065b9eec21886c6b77c8291d37904f4fc5ac0:/include/datadesc.h diff --git a/include/datadesc.h b/include/datadesc.h index 189dcc84da..87557c9d81 100644 --- a/include/datadesc.h +++ b/include/datadesc.h @@ -37,6 +37,137 @@ BEGIN_DECL + +/* datadesc */ +typedef struct s_gras_datadesc_type gras_datadesc_type_t; + +/* callbacks prototypes */ +typedef void (*gras_datadesc_type_cb_void_t)(void *vars, + gras_datadesc_type_t *p_type, + void *data); +typedef int (*gras_datadesc_type_cb_int_t)(void *vars, + gras_datadesc_type_t *p_type, + void *data); + +/*********************************************** + **** Search and retrieve declared datatype **** + ***********************************************/ +gras_datadesc_type_t *gras_datadesc_by_name(const char *name); + +/****************************************** + **** Declare datadescription yourself **** + ******************************************/ + +gras_error_t +gras_datadesc_declare_struct(const char *name, + gras_datadesc_type_t **dst); +gras_error_t +gras_datadesc_declare_struct_append(gras_datadesc_type_t *struct_type, + const char *name, + gras_datadesc_type_t *field_type); +gras_error_t +gras_datadesc_declare_union(const char *name, + gras_datadesc_type_cb_int_t selector, + gras_datadesc_type_t **dst); +gras_error_t +gras_datadesc_declare_union_append(gras_datadesc_type_t *union_type, + const char *name, + gras_datadesc_type_t *field_type); +gras_error_t +gras_datadesc_declare_ref(const char *name, + gras_datadesc_type_t *referenced_type, + gras_datadesc_type_t **dst); +gras_error_t +gras_datadesc_declare_ref_generic(const char *name, + gras_datadesc_type_cb_int_t discriminant, + gras_datadesc_type_t **dst); +gras_error_t +gras_datadesc_declare_array_fixed(const char *name, + gras_datadesc_type_t *element_type, + long int fixed_size, + gras_datadesc_type_t **dst); +gras_error_t +gras_datadesc_declare_array_dyn(const char *name, + gras_datadesc_type_t *element_type, + gras_datadesc_type_cb_int_t dynamic_size, + gras_datadesc_type_t **dst); + +/********************************* + * Change stuff within datadescs * + *********************************/ + +typedef struct s_gras_dd_cbps gras_dd_cbps_t; +void gras_datadesc_cb_set_pre (gras_datadesc_type_t *type, + gras_datadesc_type_cb_void_t pre); +void gras_datadesc_cb_set_post(gras_datadesc_type_t *type, + gras_datadesc_type_cb_void_t post); + +/****************************** + * Get stuff within datadescs * + ******************************/ +char * gras_datadesc_get_name(gras_datadesc_type_t *ddt); +int gras_datadesc_get_id(gras_datadesc_type_t *ddt); + +/******************************************************** + * Advanced data describing: callback persistent states * + ********************************************************/ + +void * +gras_dd_cbps_pop (gras_dd_cbps_t *ps, + const char *name, + gras_datadesc_type_t **ddt); +void +gras_dd_cbps_push(gras_dd_cbps_t *ps, + const char *name, + void *data, + gras_datadesc_type_t *ddt); +void +gras_dd_cbps_set (gras_dd_cbps_t *ps, + const char *name, + void *data, + gras_datadesc_type_t *ddt); + +void * +gras_dd_cbps_get (gras_dd_cbps_t *ps, + const char *name, + gras_datadesc_type_t **ddt); + +void +gras_dd_cbps_block_begin(gras_dd_cbps_t *ps); +void +gras_dd_cbps_block_end(gras_dd_cbps_t *ps); + + + + +/******************************* + **** About data convertion **** + *******************************/ +int gras_arch_selfid(void); /* ID of this arch */ + +/**************************** + **** Parse C statements **** + ****************************/ +gras_error_t +gras_datadesc_parse(const char *name, + const char *Cdefinition, + gras_datadesc_type_t **dst); +#define GRAS_DEFINE_TYPE(name,def) \ + static const char * _gras_this_type_symbol_does_not_exist__##name=#def; def + +/*#define gras_type_symbol_parse(name) \ + _gras_datadesc_parse(_gras_this_datadesc_type_symbol_does_not_exist__##name) +*/ +#define gras_datadesc_by_symbol(name) \ + (bag->bag_ops->get_type_by_name(bag, NULL, #name) ? \ + bag->bag_ops->get_type_by_name(bag, NULL, #name) : \ + gras_datadesc_parse(name) \ + ) + +/***************************** + **** NWS datadescription **** + *****************************/ + /** * Basic types we can embeed in DataDescriptors. */ @@ -77,24 +208,12 @@ typedef struct DataDescriptorStruct { sizeof(structType) - offsetof(structType, lastMember) - \ sizeof(memberType) * repetitions - -gras_error_t gras_datadesc_parse(const char *def, - gras_datadesc_t **dst); -gras_error_t gras_datadesc_from_nws(const DataDescriptor *desc, - size_t howmany, - gras_datadesc_t **dst); -gras_error_t gras_datadesc_eq(const gras_datadesc_t *d1, - const gras_datadesc_t *d2); -gras_error_t gras_datadesc_cpy(gras_datadesc_t *src, - gras_datadesc_t **dst); -gras_error_t gras_datadesc_sizeof_host(gras_datadesc_t *desc, - size_t *dst); -gras_error_t gras_datadesc_sizeof_network(gras_datadesc_t *desc, - size_t *dst); - - +gras_error_t +gras_datadesc_import_nws(const char *name, + const DataDescriptor *desc, + size_t howmany, + gras_datadesc_type_t **dst); END_DECL #endif /* GRAS_DATADESC_H */ -