Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Rha!
[simgrid.git] / include / xbt / swag.h
index c235387..c8a7331 100644 (file)
@@ -11,6 +11,8 @@
 /* Whenever a new object with this struct is created, all fields have
    to be set to NULL */
 
+#include "xbt/sysdep.h"
+
 typedef struct xbt_swag_hookup {
   void *next;
   void *prev;
@@ -24,9 +26,11 @@ typedef struct xbt_swag {
 } s_xbt_swag_t, *xbt_swag_t;
 
 xbt_swag_t xbt_swag_new(size_t offset);
+void xbt_swag_free(xbt_swag_t swag);
 void xbt_swag_init(xbt_swag_t swag, size_t offset);
 void xbt_swag_insert(void *obj, xbt_swag_t swag);
-void *xbt_swag_extract(void *obj, xbt_swag_t swag);
+void *xbt_swag_remove(void *obj, xbt_swag_t swag);
+void *xbt_swag_extract(xbt_swag_t swag);
 int xbt_swag_size(xbt_swag_t swag);
 int xbt_swag_belongs(void *obj, xbt_swag_t swag);
 
@@ -44,3 +48,12 @@ static __inline__ void *xbt_swag_getFirst(xbt_swag_t swag)
    for((obj)=xbt_swag_getFirst((swag));                       \
        (obj)!=NULL;                                           \
        (obj)=xbt_swag_getNext((obj),(swag)->offset))
+
+#define xbt_swag_foreach_safe(obj,obj_next,swag)                  \
+   for((obj)=xbt_swag_getFirst((swag)),                           \
+       ((obj)?(obj_next=xbt_swag_getNext((obj),(swag)->offset)):  \
+                (obj_next=NULL));                                \
+       (obj)!=NULL;                                               \
+       (obj)=obj_next,                                            \
+       ((obj)?(obj_next=xbt_swag_getNext((obj),(swag)->offset)):  \
+                 (obj_next=NULL))     )