X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/ff021a73f0cd26b2f27ca729783aa486393f9b3a..c76053bdb9d3a9e353be7a5533d1e0bfc48d9d03:/include/datadesc.h diff --git a/include/datadesc.h b/include/datadesc.h index 1948e24922..925a301c61 100644 --- a/include/datadesc.h +++ b/include/datadesc.h @@ -3,7 +3,7 @@ /* gras/datadesc.h - Describing the data you want to exchange */ /* Authors: Martin Quinson */ -/* Copyright (C) 2003 the OURAGAN project. */ +/* Copyright (C) 2003, 2004 Martin Quinson. */ /* This program is free software; you can redistribute it and/or modify it under the terms of the license (GNU LGPL) which comes with this package. */ @@ -37,6 +37,138 @@ 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); +void +gras_datadesc_declare_struct_close(gras_datadesc_type_t *struct_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); +void +gras_datadesc_declare_union_close(gras_datadesc_type_t *union_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_datadesc_type_t * +gras_datadesc_parse(const char *name, + const char *Cdefinition); +#define GRAS_DEFINE_TYPE(name,def) \ + static const char * _gras_this_type_symbol_does_not_exist__##name=#def; def + +#define gras_datadesc_by_symbol(name) \ + (gras_datadesc_by_name(#name) ? \ + gras_datadesc_by_name(#name) : \ + gras_datadesc_parse(#name, \ + _gras_this_type_symbol_does_not_exist__##name) \ + ) + +/***************************** + **** NWS datadescription **** + *****************************/ + /** * Basic types we can embeed in DataDescriptors. */ @@ -77,7 +209,12 @@ typedef struct DataDescriptorStruct { sizeof(structType) - offsetof(structType, lastMember) - \ sizeof(memberType) * repetitions +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 */ -