X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/3e8755b31f40edd05eb6679b4c5571083020545a..e6692e68ddfe1ef3234cacab53edb44277ae4405:/src/xbt/fifo.c diff --git a/src/xbt/fifo.c b/src/xbt/fifo.c index 2f191af958..e0c41218d5 100644 --- a/src/xbt/fifo.c +++ b/src/xbt/fifo.c @@ -1,14 +1,23 @@ -/* Authors: Arnaud Legrand */ +/* $Id$ */ + +/* Copyright (c) 2004 Arnaud Legrand. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it - under the terms of the license (GNU LGPL) which comes with this package. */ + * under the terms of the license (GNU LGPL) which comes with this package. */ #include "xbt/sysdep.h" #include "xbt/error.h" #include "fifo_private.h" -/* - * xbt_fifo_new() +XBT_LOG_NEW_DEFAULT_SUBCATEGORY(fifo,xbt,"FIFO"); + +/** \name Functions + * \ingroup XBT_fifo + */ +/*@{*/ + +/** Constructor + * \return a new fifo */ xbt_fifo_t xbt_fifo_new(void) { @@ -17,8 +26,10 @@ xbt_fifo_t xbt_fifo_new(void) return fifo; } -/* - * xbt_fifo_free() +/** Destructor + * \param l poor victim + * + * Free the fifo structure. None of the objects that was in the fifo is however modified. */ void xbt_fifo_free(xbt_fifo_t l) { @@ -30,9 +41,12 @@ void xbt_fifo_free(xbt_fifo_t l) return; } -/* - * xbt_fifo_push() - * at the tail +/* Push + * \param l list + * \param t element + * \return the bucket that was just added + * + * Add an object at the tail of the list */ xbt_fifo_item_t xbt_fifo_push(xbt_fifo_t l, void *t) { @@ -45,26 +59,32 @@ xbt_fifo_item_t xbt_fifo_push(xbt_fifo_t l, void *t) return new; } -/* - * xbt_fifo_pop() - * from the tail +/** Pop + * \param l list + * \returns the object stored at the tail of the list. + * + * Removes and returns the object stored at the tail of the list. + * Returns NULL if the list is empty. */ void *xbt_fifo_pop(xbt_fifo_t l) { xbt_fifo_item_t item; void *content; - item = xbt_fifo_pop_item(l); - if(item==NULL) return NULL; + if(l==NULL) return NULL; + if(!(item = xbt_fifo_pop_item(l))) return NULL; content = item->content; xbt_fifo_freeitem(item); return content; } -/* - * xbt_fifo_unshift() - * at the head +/** + * \param l list + * \param t element + * \return the bucket that was just added + * + * Add an object at the head of the list */ xbt_fifo_item_t xbt_fifo_unshift(xbt_fifo_t l, void *t) { @@ -76,26 +96,31 @@ xbt_fifo_item_t xbt_fifo_unshift(xbt_fifo_t l, void *t) return new; } -/* - * xbt_fifo_shift() - * from the head +/** Shift + * \param l list + * \returns the object stored at the head of the list. + * + * Removes and returns the object stored at the head of the list. + * Returns NULL if the list is empty. */ void *xbt_fifo_shift(xbt_fifo_t l) { xbt_fifo_item_t item; void *content; - item = xbt_fifo_shift_item(l); if(l==NULL) return NULL; - + if(!(item = xbt_fifo_shift_item(l))) return NULL; + content = item->content; xbt_fifo_freeitem(item); return content; } -/* - * xbt_fifo_push_item() - * at the tail +/** Push a bucket + * \param l list + * \param new bucket + * + * Hook up this bucket at the tail of the list */ void xbt_fifo_push_item(xbt_fifo_t l, xbt_fifo_item_t new) { @@ -110,9 +135,11 @@ void xbt_fifo_push_item(xbt_fifo_t l, xbt_fifo_item_t new) l->tail = new; } -/* - * xbt_fifo_pop_item() - * from the tail +/** Pop bucket + * \param l + * \returns the bucket that was at the tail of the list. + * + * Returns NULL if the list was empty. */ xbt_fifo_item_t xbt_fifo_pop_item(xbt_fifo_t l) { @@ -133,9 +160,11 @@ xbt_fifo_item_t xbt_fifo_pop_item(xbt_fifo_t l) return item; } -/* - * xbt_fifo_unshift_item() - * at the head +/** Push a bucket + * \param l list + * \param new bucket + * + * Hook up this bucket at the head of the list */ void xbt_fifo_unshift_item(xbt_fifo_t l, xbt_fifo_item_t new) { @@ -151,9 +180,11 @@ void xbt_fifo_unshift_item(xbt_fifo_t l, xbt_fifo_item_t new) return; } -/* - * xbt_fifo_shift_item() - * from the head +/** Shift bucket + * \param l + * \returns the bucket that was at the head of the list. + * + * Returns NULL if the list was empty. */ xbt_fifo_item_t xbt_fifo_shift_item(xbt_fifo_t l) { @@ -174,9 +205,12 @@ xbt_fifo_item_t xbt_fifo_shift_item(xbt_fifo_t l) return item; } -/* - * xbt_fifo_remove() - * removes an xbt_fifo_item_t using its content from the xbt_fifo +/** + * \param l + * \param t an objet + * + * removes the first occurence of \a t from \a l. + * \warning it will not remove duplicates */ void xbt_fifo_remove(xbt_fifo_t l, void *t) { @@ -196,9 +230,11 @@ void xbt_fifo_remove(xbt_fifo_t l, void *t) return; } -/* - * xbt_fifo_remove_item() - * removes a given xbt_fifo_item_t from the xbt_fifo +/** + * \param l a list + * \param current a bucket + * + * removes a the bucket \a current from the list \a l */ void xbt_fifo_remove_item(xbt_fifo_t l, xbt_fifo_item_t current) { @@ -222,8 +258,10 @@ void xbt_fifo_remove_item(xbt_fifo_t l, xbt_fifo_item_t current) (l->count)--; } -/* - * xbt_fifo_is_in() +/** + * \param f a list + * \param content an object + * \return 1 if \a content is in \a f. */ int xbt_fifo_is_in(xbt_fifo_t f, void *content) { @@ -236,8 +274,9 @@ int xbt_fifo_is_in(xbt_fifo_t f, void *content) return 0; } -/* - * xbt_fifo_to_array() +/** + * \param f a list + * \return a table with the objects stored in \a f. */ void **xbt_fifo_to_array(xbt_fifo_t f) { @@ -256,8 +295,9 @@ void **xbt_fifo_to_array(xbt_fifo_t f) return array; } -/* - * xbt_fifo_Copy() +/** + * \param f a list + * \return a copy of \a f. */ xbt_fifo_t xbt_fifo_copy(xbt_fifo_t f) { @@ -272,26 +312,38 @@ xbt_fifo_t xbt_fifo_copy(xbt_fifo_t f) return copy; } -/* - * xbt_fifo_newitem() +/** Constructor + * \return a new bucket */ xbt_fifo_item_t xbt_fifo_newitem(void) { return xbt_new0(struct xbt_fifo_item,1); } +/** + * \param i a bucket + * \param v an object + * + * stores \a v in \a i. + */ void xbt_fifo_set_item_content(xbt_fifo_item_t i , void *v) { xbt_fifo_setItemcontent(i,v); } +/** + * \param i a bucket + * \return the object stored \a i. + */ void *xbt_fifo_get_item_content(xbt_fifo_item_t i) { return xbt_fifo_getItemcontent(i); } -/* - * xbt_fifo_freeitem() +/** Destructor + * \param b poor victim + * + * Free the bucket but does not modifies the object (if any) that was stored in it. */ void xbt_fifo_freeitem(xbt_fifo_item_t b) { @@ -299,9 +351,43 @@ void xbt_fifo_freeitem(xbt_fifo_item_t b) return; } +/** + * \param f a list + * \return the number of buckets in \a f. + */ int xbt_fifo_size(xbt_fifo_t f) { return f->count; } +/** + * \param l a list + * \return the head of \a l. + */ +xbt_fifo_item_t xbt_fifo_getFirstItem(xbt_fifo_t l) +{ + return l->head; +} + +/** + * \param i a bucket + * \return the bucket that comes next + */ +xbt_fifo_item_t xbt_fifo_getNextItem(xbt_fifo_item_t i) +{ + if(i) return i->next; + return NULL; +} + +/** + * \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) +{ + if(i) return i->prev; + return NULL; +} +/*@}*/ +