X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/e6692e68ddfe1ef3234cacab53edb44277ae4405..13206972c2b37e1891db900c963e596671da5870:/src/xbt/fifo.c diff --git a/src/xbt/fifo.c b/src/xbt/fifo.c index e0c41218d5..252d2d1e2e 100644 --- a/src/xbt/fifo.c +++ b/src/xbt/fifo.c @@ -6,16 +6,11 @@ * under the terms of the license (GNU LGPL) which comes with this package. */ #include "xbt/sysdep.h" -#include "xbt/error.h" +#include "xbt/log.h" #include "fifo_private.h" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(fifo,xbt,"FIFO"); -/** \name Functions - * \ingroup XBT_fifo - */ -/*@{*/ - /** Constructor * \return a new fifo */ @@ -35,8 +30,8 @@ void xbt_fifo_free(xbt_fifo_t l) { xbt_fifo_item_t b, tmp; - for (b = xbt_fifo_getFirstitem(l); b; - tmp = b, b = b->next, xbt_fifo_freeitem(tmp)); + for (b = xbt_fifo_get_first_item(l); b; + tmp = b, b = b->next, xbt_fifo_free_item(tmp)); free(l); return; } @@ -52,7 +47,7 @@ xbt_fifo_item_t xbt_fifo_push(xbt_fifo_t l, void *t) { xbt_fifo_item_t new; - new = xbt_fifo_newitem(); + new = xbt_fifo_new_item(); new->content = t; xbt_fifo_push_item(l,new); @@ -75,7 +70,7 @@ void *xbt_fifo_pop(xbt_fifo_t l) if(!(item = xbt_fifo_pop_item(l))) return NULL; content = item->content; - xbt_fifo_freeitem(item); + xbt_fifo_free_item(item); return content; } @@ -90,7 +85,7 @@ xbt_fifo_item_t xbt_fifo_unshift(xbt_fifo_t l, void *t) { xbt_fifo_item_t new; - new = xbt_fifo_newitem(); + new = xbt_fifo_new_item(); new->content = t; xbt_fifo_unshift_item(l,new); return new; @@ -112,7 +107,7 @@ void *xbt_fifo_shift(xbt_fifo_t l) if(!(item = xbt_fifo_shift_item(l))) return NULL; content = item->content; - xbt_fifo_freeitem(item); + xbt_fifo_free_item(item); return content; } @@ -124,6 +119,7 @@ void *xbt_fifo_shift(xbt_fifo_t l) */ void xbt_fifo_push_item(xbt_fifo_t l, xbt_fifo_item_t new) { + xbt_assert0((new->next == NULL)&&(new->prev == NULL),"Invalid item!"); (l->count)++; if (l->head == NULL) { l->head = new; @@ -149,7 +145,7 @@ xbt_fifo_item_t xbt_fifo_pop_item(xbt_fifo_t l) return NULL; item = l->tail; - + l->tail = item->prev; if (l->tail == NULL) l->head = NULL; @@ -157,6 +153,9 @@ xbt_fifo_item_t xbt_fifo_pop_item(xbt_fifo_t l) l->tail->next = NULL; (l->count)--; + + item->prev = NULL; + return item; } @@ -168,6 +167,7 @@ xbt_fifo_item_t xbt_fifo_pop_item(xbt_fifo_t l) */ void xbt_fifo_unshift_item(xbt_fifo_t l, xbt_fifo_item_t new) { + xbt_assert0((new->next == NULL)&&(new->prev == NULL),"Invalid item!"); (l->count)++; if (l->head == NULL) { l->head = new; @@ -202,6 +202,9 @@ xbt_fifo_item_t xbt_fifo_shift_item(xbt_fifo_t l) l->head->prev = NULL; (l->count)--; + + item->next = NULL; + return item; } @@ -223,7 +226,7 @@ void xbt_fifo_remove(xbt_fifo_t l, void *t) continue; /* remove the item */ xbt_fifo_remove_item(l, current); - xbt_fifo_freeitem(current); + xbt_fifo_free_item(current); /* WILL NOT REMOVE DUPLICATES */ break; } @@ -234,28 +237,32 @@ void xbt_fifo_remove(xbt_fifo_t l, void *t) * \param l a list * \param current a bucket * - * removes a the bucket \a current from the list \a l + * removes a bucket \a current from the list \a l. This function implicitely + * assumes (and doesn't check!) that this item belongs to this list... */ void xbt_fifo_remove_item(xbt_fifo_t l, xbt_fifo_item_t current) { if (l->head == l->tail) { /* special case */ - l->head = NULL; - l->tail = NULL; - (l->count)--; - return; - } - - if (current == l->head) { /* It's the head */ - l->head = current->next; - l->head->prev = NULL; - } else if (current == l->tail) { /* It's the tail */ - l->tail = current->prev; - l->tail->next = NULL; - } else { /* It's in the middle */ - current->prev->next = current->next; - current->next->prev = current->prev; - } + xbt_assert0((current==l->head),"This item is not in the list!"); + l->head = NULL; + l->tail = NULL; (l->count)--; + current->prev = current->next = NULL; + return; + } + + if (current == l->head) { /* It's the head */ + l->head = current->next; + l->head->prev = NULL; + } else if (current == l->tail) { /* It's the tail */ + l->tail = current->prev; + l->tail->next = NULL; + } else { /* It's in the middle */ + current->prev->next = current->next; + current->next->prev = current->prev; + } + (l->count)--; + current->prev = current->next = NULL; } /** @@ -265,7 +272,7 @@ void xbt_fifo_remove_item(xbt_fifo_t l, xbt_fifo_item_t current) */ int xbt_fifo_is_in(xbt_fifo_t f, void *content) { - xbt_fifo_item_t item = xbt_fifo_getFirstitem(f); + xbt_fifo_item_t item = xbt_fifo_get_first_item(f); while (item) { if (item->content == content) return 1; @@ -289,7 +296,7 @@ void **xbt_fifo_to_array(xbt_fifo_t f) else array = xbt_new0(void *, f->count); - for (i = 0, b = xbt_fifo_getFirstitem(f); b; i++, b = b->next) { + for (i = 0, b = xbt_fifo_get_first_item(f); b; i++, b = b->next) { array[i] = b->content; } return array; @@ -306,7 +313,7 @@ xbt_fifo_t xbt_fifo_copy(xbt_fifo_t f) copy = xbt_fifo_new(); - for (b = xbt_fifo_getFirstitem(f); b; b = b->next) { + for (b = xbt_fifo_get_first_item(f); b; b = b->next) { xbt_fifo_push(copy, b->content); } return copy; @@ -315,11 +322,19 @@ xbt_fifo_t xbt_fifo_copy(xbt_fifo_t f) /** Constructor * \return a new bucket */ -xbt_fifo_item_t xbt_fifo_newitem(void) +xbt_fifo_item_t xbt_fifo_new_item(void) { return xbt_new0(struct xbt_fifo_item,1); } +/** \deprecated Use #xbt_fifo_new_item instead. + */ +xbt_fifo_item_t xbt_fifo_newitem(void) +{ + WARN0("This function is deprecated. Use xbt_fifo_new_item."); + return xbt_fifo_new_item(); +} + /** * \param i a bucket * \param v an object @@ -345,8 +360,18 @@ void *xbt_fifo_get_item_content(xbt_fifo_item_t i) * * Free the bucket but does not modifies the object (if any) that was stored in it. */ +void xbt_fifo_free_item(xbt_fifo_item_t b) +{ + free(b); + return; +} + +/** Destructor + * \deprecated Use #xbt_fifo_free_item instead. + */ void xbt_fifo_freeitem(xbt_fifo_item_t b) { + WARN0("This function is deprecated. Use xbt_fifo_free_item."); free(b); return; } @@ -364,30 +389,55 @@ int xbt_fifo_size(xbt_fifo_t f) * \param l a list * \return the head of \a l. */ -xbt_fifo_item_t xbt_fifo_getFirstItem(xbt_fifo_t l) +xbt_fifo_item_t xbt_fifo_get_first_item(xbt_fifo_t l) { return l->head; } +/** \deprecated Use #xbt_fifo_get_first_item instead. + */ +xbt_fifo_item_t xbt_fifo_getFirstItem(xbt_fifo_t l) +{ + WARN0("This function is deprecated. Use xbt_fifo_get_first_item."); + return xbt_fifo_get_first_item(l); +} + /** * \param i a bucket * \return the bucket that comes next */ -xbt_fifo_item_t xbt_fifo_getNextItem(xbt_fifo_item_t i) +xbt_fifo_item_t xbt_fifo_get_next_item(xbt_fifo_item_t i) { if(i) return i->next; return NULL; } +/** \deprecated Use #xbt_fifo_get_next_item instead. + */ +xbt_fifo_item_t xbt_fifo_getNextItem(xbt_fifo_item_t i) +{ + WARN0("This function is deprecated. Use xbt_fifo_get_next_item."); + return xbt_fifo_get_next_item(i); +} + /** * \param i a bucket * \return the bucket that is just before \a i. */ -xbt_fifo_item_t xbt_fifo_getPrevItem(xbt_fifo_item_t i) +xbt_fifo_item_t xbt_fifo_get_prev_item(xbt_fifo_item_t i) { if(i) return i->prev; return NULL; } -/*@}*/ + +/** \deprecated Use #xbt_fifo_get_prev_item instead. + */ +xbt_fifo_item_t xbt_fifo_getPrevItem(xbt_fifo_item_t i) +{ + WARN0("This function is deprecated. Use xbt_fifo_get_prev_item."); + return xbt_fifo_get_prev_item(i); +} + +/* @} */