Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Adding convenient function.
authoralegrand <alegrand@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Mon, 6 Aug 2007 12:10:59 +0000 (12:10 +0000)
committeralegrand <alegrand@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Mon, 6 Aug 2007 12:10:59 +0000 (12:10 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@3982 48e7efb5-ca39-0410-a469-dd3cf9ba447f

include/xbt/fifo.h
src/xbt/fifo.c

index c63c371..b325512 100644 (file)
@@ -66,6 +66,7 @@ XBT_PUBLIC(void) xbt_fifo_unshift_item(xbt_fifo_t, xbt_fifo_item_t);
 XBT_PUBLIC(xbt_fifo_item_t) xbt_fifo_shift_item(xbt_fifo_t);
 
 XBT_PUBLIC(int) xbt_fifo_remove(xbt_fifo_t, void *);
 XBT_PUBLIC(xbt_fifo_item_t) xbt_fifo_shift_item(xbt_fifo_t);
 
 XBT_PUBLIC(int) xbt_fifo_remove(xbt_fifo_t, void *);
+XBT_PUBLIC(int) xbt_fifo_remove_all(xbt_fifo_t, void *);
 XBT_PUBLIC(void) xbt_fifo_remove_item(xbt_fifo_t, xbt_fifo_item_t);
 
 XBT_PUBLIC(xbt_fifo_item_t) xbt_fifo_get_first_item(xbt_fifo_t l);
 XBT_PUBLIC(void) xbt_fifo_remove_item(xbt_fifo_t, xbt_fifo_item_t);
 
 XBT_PUBLIC(xbt_fifo_item_t) xbt_fifo_get_first_item(xbt_fifo_t l);
index f91ab83..bf3e61e 100644 (file)
@@ -249,6 +249,31 @@ int  xbt_fifo_remove(xbt_fifo_t l, void *t)
   return 0;
 }
 
   return 0;
 }
 
+
+/**
+ * \param l 
+ * \param t an objet
+ *
+ * removes all occurences of \a t from \a l. 
+ * \return 1 if an item was removed and 0 otherwise.
+ */
+int  xbt_fifo_remove_all(xbt_fifo_t l, void *t)
+{
+  xbt_fifo_item_t current, current_next;
+  int res=0;
+
+  for (current = l->head; current; current = current_next) {
+    current_next = current->next;
+    if (current->content != t)
+      continue;
+    /* remove the item */
+    xbt_fifo_remove_item(l, current);
+    xbt_fifo_free_item(current);
+    res=1;
+  }
+  return res;
+}
+
 /**
  * \param l a list
  * \param current a bucket
 /**
  * \param l a list
  * \param current a bucket