Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 4703 → Rev 4704

/branches/network/uspace/srv/net/structures/dynamic_fifo.h
31,32 → 31,86
*/
 
/** @file
* Dynamic first in first out positive integer queue.
* Possitive integer values only.
*/
 
#ifndef __NET_DYNAMIC_FIFO_H__
#define __NET_DYNAMIC_FIFO_H__
 
/* For possitive values only */
/** Type definition of the dynamic fifo queue.
* @see dyn_fifo
*/
typedef struct dyn_fifo dyn_fifo_t;
 
typedef struct dyn_fifo dyn_fifo_t;
/** Type definition of the dynamic fifo queue pointer.
* @see dyn_fifo
*/
typedef dyn_fifo_t * dyn_fifo_ref;
 
/** Dynamic first in first out positive integer queue.
* Possitive integer values only.
* The queue automatically resizes if needed.
*/
struct dyn_fifo{
/** Stored item field.
*/
int * items;
/** Actual field size.
*/
int size;
/** First item in the queue index.
*/
int head;
/** Last item in the queue index.
*/
int tail;
/** Consistency check magic value.
*/
int magic_value;
};
 
/** Initializes the dynamic queue.
* @param fifo The dynamic queue. Input/output parameter.
* @param size The initial queue size. Input parameter.
* @returns EOK on success.
* @returns EINVAL if the queue is not valid.
* @returns EBADMEM if the fifo parameter is NULL.
* @returns ENOMEM if there is not enough memory left.
*/
int dyn_fifo_initialize( dyn_fifo_ref fifo, int size );
 
/** Appends a new item to the queue end.
* @param fifo The dynamic queue. Input/output parameter.
* @param value The new item value. Should be positive. Input parameter.
* @param max_size The maximum queue size. The queue is not resized beyound this limit. May be zero or negative (<=0) to indicate no limit. Input parameter.
* @returns EOK on success.
* @returns EINVAL if the queue is not valid.
* @returns ENOMEM if there is not enough memory left.
*/
int dyn_fifo_push( dyn_fifo_ref fifo, int value, int max_size );
 
/** Returns and excludes the first item in the queue.
* @param fifo The dynamic queue. Input/output parameter.
* @returns Value of the first item in the queue.
* @returns EINVAL if the queue is not valid.
* @returns ENOENT if the queue is empty.
*/
int dyn_fifo_pop( dyn_fifo_ref fifo );
 
/** Returns and keeps the first item in the queue.
* @param fifo The dynamic queue. Input/output parameter.
* @returns Value of the first item in the queue.
* @returns EINVAL if the queue is not valid.
* @returns ENOENT if the queue is empty.
*/
int dyn_fifo_value( dyn_fifo_ref fifo );
 
/** Clears and destroys the queue.
* @param fifo The dynamic queue. Input/output parameter.
* @returns EOK on success.
* @returns EINVAL if the queue is not valid.
*/
int dyn_fifo_destroy( dyn_fifo_ref fifo );
 
#endif