diff options
Diffstat (limited to 'include/bh/queue.h')
| -rw-r--r-- | include/bh/queue.h | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/include/bh/queue.h b/include/bh/queue.h new file mode 100644 index 0000000..c5185ef --- /dev/null +++ b/include/bh/queue.h @@ -0,0 +1,159 @@ +#ifndef BH_QUEUE_H +#define BH_QUEUE_H + +#include <bh/bh.h> + +typedef struct bh_queue_s bh_queue_t; + +/** + * @brief Create new queue object. + * + * @return If the function succeeds, the return value is a pointer to the new + * queue object. + * @return If the function fails, the return value is NULL. + * + * @sa bh_queue_free, bh_queue_reserve, bh_queue_insert + */ +bh_queue_t *bh_queue_new(void); + +/** + * @brief Free queue object. + * + * @param queue Valid pointer to the queue object. + * + * @sa bh_queue_clear + */ +void bh_queue_free(bh_queue_t *queue); + +/** + * @brief Clear the queue. + * + * @param queue Valid pointer to the queue object. + * + * @warning Clearing the queue does invalidate iterators. + * + * @sa bh_queue_remove + */ +void bh_queue_clear(bh_queue_t *queue); + +/** + * @brief Reserve space for the specified amount of elements. + * + * @param queue Valid pointer to the queue object. + * @param size The amount of elements. + * + * @return If the function succeeds, the return value is zero. + * @return If the function fails, the return value is non-zero. + * + * @warning Reserving queue space does invalidate iterators. + * + * @sa bh_queue_capacity, bh_queue_insert + */ +int bh_queue_reserve(bh_queue_t *queue, + size_t size); + +/** + * @brief Insert element at the end of the queue. + * + * @param queue Valid pointer to the queue object. + * @param value Element. + * + * @return If the function succeeds, the return value is zero. + * @return If the function fails, the return value is non-zero. + * + * @warning Inserted element is owned by the caller of the function. + * @warning Inserting elements into the queue does invalidate iterators. + * + * @sa bh_queue_remove, bh_queue_front + */ +int bh_queue_insert(bh_queue_t *queue, + void *value); + +/** + * @brief Remove element from the front of the queue. + * + * @param queue Valid pointer to the queue object. + * + * @warning Removing elements from the queue does invalidate iterators. + * + * @sa bh_queue_insert, bh_queue_front + */ +void bh_queue_remove(bh_queue_t *queue); + +/** + * @brief Return element from the front of the queue. + * + * @param queue Valid pointer to the queue object. + * + * @return If the function succeeds, the return value is a valid pointer to + * the element. + * @return If the function fails, the return value is NULL. + * + * @note If the queue is empty, function will fail to return element from + * the queue. + * + * @sa bh_queue_empty, bh_queue_insert + */ +void *bh_queue_front(bh_queue_t *queue); + +/** + * @brief Check if the queue is empty. + * + * @param queue Valid pointer to the queue object. + * + * @return The return value is non-zero if the queue is empty, otherwise zero. + * + * @sa bh_queue_size + */ +int bh_queue_empty(bh_queue_t *queue); + +/** + * @brief Return queue size. + * + * @param queue Valid pointer to the queue object. + * + * @return The return value is current queue size. + * + * @sa bh_queue_empty, bh_queue_capacity + */ +size_t bh_queue_size(bh_queue_t *queue); + +/** + * @brief Return queue capacity. + * + * @param queue Valid pointer to the queue object. + * + * @return The return value is current queue capacity. + * + * @sa bh_queue_reserve, bh_queue_size + */ +size_t bh_queue_capacity(bh_queue_t *queue); + +/** + * @brief Return iterator for the next element in the queue. + * + * @param queue Valid pointer to the queue object. + * @param iter Valid or NULL iterator. + * + * @return The return value is the valid iterator for the next element in the + * queue. + * @return The return value is the NULL iterator if there is no more elements + * in the queue. + * + * @sa bh_queue_iter_value + */ +void *bh_queue_iter_next(bh_queue_t *queue, + void *iter); + +/** + * @brief Return pointer to the element's value. + * + * @param iter Valid iterator. + * + * @return The return value is the stored element. + * + * @sa bh_queue_iter_next + */ +void *bh_queue_iter_value(void *iter); + +#endif /* BH_QUEUE_H */ |
