X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/0f5e8daaa6e9f74521068aa75837200bcd182ea6..1f50f809c4d885ff2b2c1a626d69ebb4cea0502f:/src/xbt/fifo.c diff --git a/src/xbt/fifo.c b/src/xbt/fifo.c index c3d4ffb905..7a425f687c 100644 --- a/src/xbt/fifo.c +++ b/src/xbt/fifo.c @@ -13,7 +13,7 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(xbt_fifo, xbt, "FIFO"); static void *fifo_item_mallocator_new_f(void); -static void fifo_item_mallocator_free_f(void *item); +#define fifo_item_mallocator_free_f xbt_free_f static void fifo_item_mallocator_reset_f(void *item); static xbt_mallocator_t item_mallocator = NULL; @@ -36,13 +36,24 @@ xbt_fifo_t xbt_fifo_new(void) * Free the fifo structure. None of the objects that was in the fifo is however modified. */ void xbt_fifo_free(xbt_fifo_t l) +{ + xbt_fifo_reset(l); + xbt_free(l); +} + +/** + * \brief Makes a fifo empty. + * \param l a fifo + * + * None of the objects that was in the fifo is however modified. + */ +void xbt_fifo_reset(xbt_fifo_t l) { xbt_fifo_item_t b, tmp; for (b = xbt_fifo_get_first_item(l); b; tmp = b, b = b->next, xbt_fifo_free_item(tmp)); - xbt_free(l); - return; + l->head = l->tail = NULL; } /** Push @@ -132,7 +143,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!"); + xbt_assert((new->next == NULL) && (new->prev == NULL), "Invalid item!"); (l->count)++; if (l->head == NULL) { l->head = new; @@ -180,7 +191,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!"); + xbt_assert((new->next == NULL) && (new->prev == NULL), "Invalid item!"); (l->count)++; if (l->head == NULL) { l->head = new; @@ -282,7 +293,7 @@ int xbt_fifo_remove_all(xbt_fifo_t l, void *t) void xbt_fifo_remove_item(xbt_fifo_t l, xbt_fifo_item_t current) { if (l->head == l->tail) { /* special case */ - xbt_assert0((current == l->head), "This item is not in the list!"); + xbt_assert((current == l->head), "This item is not in the list!"); l->head = NULL; l->tail = NULL; (l->count)--; @@ -364,11 +375,6 @@ static void *fifo_item_mallocator_new_f(void) return xbt_new(s_xbt_fifo_item_t, 1); } -static void fifo_item_mallocator_free_f(void *item) -{ - xbt_free(item); -} - static void fifo_item_mallocator_reset_f(void *item) { /* memset to zero like calloc */ @@ -387,7 +393,7 @@ XBT_INLINE xbt_fifo_item_t xbt_fifo_new_item(void) */ XBT_INLINE xbt_fifo_item_t xbt_fifo_newitem(void) { - WARN0("This function is deprecated. Use xbt_fifo_new_item."); + XBT_WARN("This function is deprecated. Use xbt_fifo_new_item."); return xbt_fifo_new_item(); } @@ -427,7 +433,7 @@ XBT_INLINE void xbt_fifo_free_item(xbt_fifo_item_t b) */ XBT_INLINE void xbt_fifo_freeitem(xbt_fifo_item_t b) { - WARN0("This function is deprecated. Use xbt_fifo_free_item."); + XBT_WARN("This function is deprecated. Use xbt_fifo_free_item."); xbt_fifo_free_item(b); return; } @@ -444,6 +450,8 @@ XBT_INLINE int xbt_fifo_size(xbt_fifo_t f) /** * \param l a list * \return the head of \a l. + * + * Returns NULL if the list is empty. */ XBT_INLINE xbt_fifo_item_t xbt_fifo_get_first_item(xbt_fifo_t l) { @@ -453,6 +461,8 @@ XBT_INLINE xbt_fifo_item_t xbt_fifo_get_first_item(xbt_fifo_t l) /** * \param l a list * \return the tail of \a l. + * + * Returns NULL if the list is empty. */ XBT_INLINE xbt_fifo_item_t xbt_fifo_get_last_item(xbt_fifo_t l) { @@ -463,13 +473,15 @@ XBT_INLINE xbt_fifo_item_t xbt_fifo_get_last_item(xbt_fifo_t l) */ XBT_INLINE xbt_fifo_item_t xbt_fifo_getFirstItem(xbt_fifo_t l) { - WARN0("This function is deprecated. Use xbt_fifo_get_first_item."); + XBT_WARN("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 + * + * Returns NULL if \a i is the tail of the list. */ XBT_INLINE xbt_fifo_item_t xbt_fifo_get_next_item(xbt_fifo_item_t i) { @@ -482,13 +494,15 @@ XBT_INLINE xbt_fifo_item_t xbt_fifo_get_next_item(xbt_fifo_item_t i) */ xbt_fifo_item_t xbt_fifo_getNextItem(xbt_fifo_item_t i) { - WARN0("This function is deprecated. Use xbt_fifo_get_next_item."); + XBT_WARN("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. + * + * Returns NULL if \a i is the head of the list. */ XBT_INLINE xbt_fifo_item_t xbt_fifo_get_prev_item(xbt_fifo_item_t i) { @@ -501,7 +515,7 @@ XBT_INLINE xbt_fifo_item_t xbt_fifo_get_prev_item(xbt_fifo_item_t i) */ xbt_fifo_item_t xbt_fifo_getPrevItem(xbt_fifo_item_t i) { - WARN0("This function is deprecated. Use xbt_fifo_get_prev_item."); + XBT_WARN("This function is deprecated. Use xbt_fifo_get_prev_item."); return xbt_fifo_get_prev_item(i); } @@ -511,12 +525,7 @@ xbt_fifo_item_t xbt_fifo_getPrevItem(xbt_fifo_item_t i) */ void xbt_fifo_preinit(void) { - if (item_mallocator != NULL) { - /* Already created. I guess we want to switch to MC mode, so kill the previously created mallocator */ - xbt_mallocator_free(item_mallocator); - } - - item_mallocator = xbt_mallocator_new(256, + item_mallocator = xbt_mallocator_new(65536, fifo_item_mallocator_new_f, fifo_item_mallocator_free_f, fifo_item_mallocator_reset_f);