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 |