Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Bug fix and add a xbt_swag_foreach_safe where you can remove objects from
authoralegrand <alegrand@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Sat, 20 Nov 2004 00:11:47 +0000 (00:11 +0000)
committeralegrand <alegrand@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Sat, 20 Nov 2004 00:11:47 +0000 (00:11 +0000)
the swag while going through it.

git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@520 48e7efb5-ca39-0410-a469-dd3cf9ba447f

include/xbt/swag.h
src/xbt/swag.c

index d4533a0..5af75a7 100644 (file)
@@ -46,3 +46,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))
    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))     )
index dc09977..42e70fd 100644 (file)
@@ -57,7 +57,7 @@ void *xbt_swag_extract(void *obj, xbt_swag_t swag)
 {
   size_t offset = swag->offset;
 
 {
   size_t offset = swag->offset;
 
-  if (!obj)
+  if ((!obj) || (!swag))
     return NULL;
   if(!xbt_swag_belongs(obj, swag)) /* Trying to remove an object that
                                      was not in this swag */
     return NULL;
   if(!xbt_swag_belongs(obj, swag)) /* Trying to remove an object that
                                      was not in this swag */