X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/3d0d626e19a7b79320e7d922c9c1dcf122076cea..76abe652b11210f5af3d2ce223aa133ec79232ba:/include/xbt/set.h diff --git a/include/xbt/set.h b/include/xbt/set.h index 8fb2e2c84a..7ee9285ff5 100644 --- a/include/xbt/set.h +++ b/include/xbt/set.h @@ -1,72 +1,83 @@ /* $Id$ */ -/* gras/set.h -- api to a generic dictionary */ +/* xbt/set.h -- api to a generic dictionary */ -/* Authors: Martin Quinson */ -/* Copyright (C) 2004 the OURAGAN project. */ +/* Copyright (c) 2004 Martin Quinson. All rights reserved. */ /* 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. */ + * under the terms of the license (GNU LGPL) which comes with this package. */ +#ifndef _XBT_SET_H +#define _XBT_SET_H -#ifndef _GRAS_SET_H -#define _GRAS_SET_H +#include "xbt/misc.h" /* BEGIN_DECL */ -#ifdef __cplusplus -extern "C" -#endif +BEGIN_DECL() /*####[ Type definition ]####################################################*/ -typedef struct gras_set_ gras_set_t; -typedef struct gras_set_elm_ { +/** \name Set and set elements + \ingroup XBT_set + generic dictionary +*/ +/*@{*/ +typedef struct xbt_set_ *xbt_set_t; /**< Set */ +typedef struct xbt_set_elm_ { unsigned int ID; char *name; unsigned int name_len; -} gras_set_elm_t; +} s_xbt_set_elm_t,*xbt_set_elm_t; /**< Set element */ /*####[ Functions ]##########################################################*/ -void gras_set_new (gras_set_t **dst); -void gras_set_free(gras_set_t **set); +xbt_set_t xbt_set_new (void); +void xbt_set_free(xbt_set_t *set); -void gras_set_add (gras_set_t *set, - gras_set_elm_t *elm, +void xbt_set_add (xbt_set_t set, + xbt_set_elm_t elm, void_f_pvoid_t *free_func); -/*----[ gras_set_retrieve ]-------------------------------------------------*/ +/*----[ xbt_set_retrieve ]-------------------------------------------------*/ /* Search the given #key#. data=NULL when not found. */ /*---------------------------------------------------------------------------*/ -gras_error_t gras_set_get_by_name (gras_set_t *set, +xbt_error_t xbt_set_get_by_name (xbt_set_t set, const char *key, - /* OUT */gras_set_elm_t **dst); -gras_error_t gras_set_get_by_name_ext(gras_set_t *set, + /* OUT */xbt_set_elm_t *dst); +xbt_error_t xbt_set_get_by_name_ext(xbt_set_t set, const char *name, int name_len, - /* OUT */gras_set_elm_t **dst); -gras_error_t gras_set_get_by_id (gras_set_t *set, + /* OUT */xbt_set_elm_t *dst); +xbt_error_t xbt_set_get_by_id (xbt_set_t set, int id, - /* OUT */gras_set_elm_t **dst); + /* OUT */xbt_set_elm_t *dst); /*####[ Cache cursor functions ]#############################################*/ /* To traverse (simple) caches */ /* Don't add or remove entries to the cache while traversing !!! */ /*###########################################################################*/ -typedef struct gras_set_cursor_ gras_set_cursor_t; -/* creator/destructor */ -void gras_set_cursor_first (gras_set_t *set, - gras_set_cursor_t **cursor); -void gras_set_cursor_step (gras_set_cursor_t *cursor); -int gras_set_cursor_get_or_free (gras_set_cursor_t **cursor, - gras_set_elm_t **elm); - -#define gras_set_foreach(set,cursor,elm) \ - for (cursor=NULL, gras_set_cursor_first((set),&(cursor)) ; \ - gras_set_cursor_get_or_free(&(cursor),(gras_set_elm_t**)&(elm)); \ - gras_set_cursor_step(cursor) ) - -#ifdef __cplusplus -} -#endif - -#endif /* _GRAS_SET_H */ +typedef struct xbt_set_cursor_ *xbt_set_cursor_t; /**< Set cursor */ +/*@}*/ + +void xbt_set_cursor_first (xbt_set_t set, + xbt_set_cursor_t *cursor); +void xbt_set_cursor_step (xbt_set_cursor_t cursor); +int xbt_set_cursor_get_or_free (xbt_set_cursor_t *cursor, + xbt_set_elm_t *elm); + +/** + \brief Set iterator + \ingroup XBT_set + * \param set what to iterate over + * \param cursor a #xbt_set_cursor_t used as cursor + * \param elm a #xbt_set_elm_t + * + * Iterates over the whole set. + */ +#define xbt_set_foreach(set,cursor,elm) \ + for ((cursor) = NULL, xbt_set_cursor_first((set),&(cursor)) ; \ + xbt_set_cursor_get_or_free(&(cursor),(xbt_set_elm_t*)&(elm)); \ + xbt_set_cursor_step(cursor) ) + +END_DECL() + +#endif /* _XBT_SET_H */