Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
A new data container coupling the facilities of a dynar with the ones of a dict
[simgrid.git] / include / set.h
diff --git a/include/set.h b/include/set.h
new file mode 100644 (file)
index 0000000..efe493b
--- /dev/null
@@ -0,0 +1,72 @@
+/* $Id$ */
+
+/* gras/set.h -- api to a generic dictionary                                */
+
+/* Authors: Martin Quinson                                                  */
+/* Copyright (C) 2004 the OURAGAN project.                                  */
+
+/* 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. */
+
+
+#ifndef _GRAS_SET_H
+#define _GRAS_SET_H
+
+#ifdef  __cplusplus
+extern "C" 
+#endif
+
+/*####[ Type definition ]####################################################*/
+typedef struct gras_set_ gras_set_t;
+typedef struct gras_set_elm_ {
+  unsigned int ID;
+  char        *name;
+  unsigned int name_len;
+} gras_set_elm_t;
+
+/*####[ Functions ]##########################################################*/
+
+gras_error_t gras_set_new (gras_set_t **dst);
+void         gras_set_free(gras_set_t **set);
+
+
+gras_error_t gras_set_add    (gras_set_t     *set,
+                             gras_set_elm_t *elm,
+                             void_f_pvoid_t *free_func);
+
+/*----[ gras_set_retrieve ]-------------------------------------------------*/
+/* Search the given #key#. data=NULL when not found.                         */
+/*---------------------------------------------------------------------------*/
+gras_error_t gras_set_get_by_name    (gras_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,
+                                     const char     *name,
+                                     int             name_len,
+                                     /* OUT */gras_set_elm_t **dst);
+gras_error_t gras_set_get_by_id      (gras_set_t     *set,
+                                     int             id,
+                                     /* OUT */gras_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 */