X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/6d81da1b85e198cbed6b4d2f9d38c172991df4c9..888a7206df16f0ab8f8c02f9b18d0d1a0229cf2b:/include/xbt/set.h diff --git a/include/xbt/set.h b/include/xbt/set.h index 7af602a6a1..7d4d86eaae 100644 --- a/include/xbt/set.h +++ b/include/xbt/set.h @@ -20,12 +20,24 @@ SG_BEGIN_DECL() * * The elements stored in such a data structure can be retrieve both by * name and by ID. For this to work, the first fields of the structures - * stored must begin with: - * \verbatim unsigned int ID; + * stored must begin with the following fields: + * \verbatim struct { + unsigned int ID; char *name; - unsigned int name_len;\endverbatim + unsigned int name_len; + // my other fields, constituting the payload +} my_element_type_t; \endverbatim + * + * Since we are casting elements around, no protection is ensured by the + * compiler. It is thus safer to define the headers using the macro + * defined to that extend: + * \verbatim struct { + XBT_SET_HEADERS; + + // my other fields, constituting the payload +} my_element_type_t; \endverbatim * - * It is impossible to remove an element from such a data structure. + * It is now possible to remove an element from such a data structure. * * @todo * Such a datastructure was necessary/useful to store the GRAS type @@ -40,21 +52,25 @@ SG_BEGIN_DECL() * @{ */ /** \brief Opaque type representing a set */ -typedef struct xbt_set_ *xbt_set_t; +typedef struct xbt_set_ *xbt_set_t; + +#define XBT_SET_HEADERS \ + unsigned int ID; \ + char *name; \ + unsigned int name_len + /** \brief It must be possible to cast set elements to this type */ -struct xbt_set_elm_ { +typedef struct xbt_set_elm_ { unsigned int ID; /**< Identificator (system assigned) */ char *name; /**< Name (user assigned) */ unsigned int name_len;/**< Length of the name */ -}; +} s_xbt_set_elm_t,*xbt_set_elm_t; /*####[ Functions ]##########################################################*/ xbt_set_t xbt_set_new (void); void xbt_set_free(xbt_set_t *set); /** @} */ -typedef struct xbt_set_elm_ s_xbt_set_elm_t; -typedef struct xbt_set_elm_ * xbt_set_elm_t; /** @defgroup XBT_set_basic Sets basic usage * @ingroup XBT_set * @@ -62,6 +78,10 @@ typedef struct xbt_set_elm_ * xbt_set_elm_t; */ void xbt_set_add (xbt_set_t set, xbt_set_elm_t elm, void_f_pvoid_t *free_func); +void xbt_set_remove (xbt_set_t set, xbt_set_elm_t elm); +void xbt_set_remove_by_name (xbt_set_t set, const char *key); +void xbt_set_remove_by_name_ext (xbt_set_t set, const char *key, int key_len); +void xbt_set_remove_by_id (xbt_set_t set, int id); xbt_set_elm_t xbt_set_get_by_name (xbt_set_t set, const char *key); xbt_set_elm_t xbt_set_get_by_name_ext(xbt_set_t set, const char *key, int key_len);