- inserting and removing now needs a linked_list_iterator_t* instead of

a linked_list_element_t*
- linked_list_element_t removed
- has_next now returns bool instead of status_t
This commit is contained in:
Jan Hutter
2005-11-08 13:31:39 +00:00
parent 6fb28da078
commit e3dd1393d5
4 changed files with 279 additions and 220 deletions
+38 -56
View File
@@ -29,32 +29,6 @@
#include "types.h"
/**
* @brief Element of the linked_list.
*
* This element holds a pointer to the value of the list item itself.
*/
typedef struct linked_list_element_s linked_list_element_t;
struct linked_list_element_s {
/**
* value of a list item
*/
void *value;
};
/**
* @brief Creates an empty linked list object
*
* @param[in] value value of item to be set
*
* @warning only the pointer to the value is stored
*
* @return linked_list_element object
*/
linked_list_element_t *linked_list_element_create(void *value);
/**
* @brief Iterator for a linked list
*
@@ -70,25 +44,24 @@ struct linked_list_iterator_s {
* @brief returns TRUE if more elements are available
*
* @param this calling object
* @param[out] has_next if more elements are avaiable TRUE is set, FALSE otherwise
* @returns SUCCESS if succeeded, FAILED otherwise
* @return if more elements are avaiable TRUE, FALSE otherwise
*/
status_t (*has_next) (linked_list_iterator_t *this, bool * has_next);
bool (*has_next) (linked_list_iterator_t *this);
/**
* @brief returns the current element at the iterator position
* @brief returns the current value at the iterator position
*
* @param this calling object
* @param[out] element element is set to the current element in iterator
* @returns SUCCESS if succeeded, FAILED otherwise
* @param[out] value value is set to the current value at iterator position
* @return SUCCESS if succeeded, FAILED otherwise
*/
status_t (*current) (linked_list_iterator_t *this, linked_list_element_t **element);
status_t (*current) (linked_list_iterator_t *this, void **value);
/**
* @brief Resets a linked_list_iterator object
*
* @param this calling object
* @returns SUCCESS if succeeded, FAILED otherwise
* @return SUCCESS if succeeded, FAILED otherwise
*/
status_t (*reset) (linked_list_iterator_t *this);
@@ -96,7 +69,7 @@ struct linked_list_iterator_s {
* @brief Destroys a linked_list_iterator object
*
* @param this calling object
* @returns SUCCESS if succeeded, FAILED otherwise
* @return SUCCESS if succeeded, FAILED otherwise
*/
status_t (*destroy) (linked_list_iterator_t *this);
};
@@ -120,7 +93,7 @@ struct linked_list_s {
*
* @param linked_list calling object
* @param[in] count place where the count is written
* @returns SUCCESS if succeeded, FAILED otherwise
* @return SUCCESS if succeeded, FAILED otherwise
*/
status_t (*get_count) (linked_list_t *linked_list, int *count);
@@ -132,7 +105,7 @@ struct linked_list_s {
* @param linked_list calling object
* @param[out] iterator place where the iterator is written
* @param[in] forward iterator direction (TRUE: front to end)
* @returns SUCCESS if succeeded, FAILED otherwise
* @return SUCCESS if succeeded, FAILED otherwise
*/
status_t (*create_iterator) (linked_list_t *linked_list, linked_list_iterator_t **iterator,bool forward);
@@ -141,45 +114,54 @@ struct linked_list_s {
*
* @param linked_list calling object
* @param[in] item value to insert in list
* @returns SUCCESS if succeeded, FAILED otherwise
* @return SUCCESS if succeeded, FAILED otherwise
*/
status_t (*insert_first) (linked_list_t *linked_list, void *item);
/**
* @brief inserts a new item before the given element
* @brief inserts a new item before the given iterator position
*
* The iterator position is not changed after inserting
*
* @param linked_list calling object
* @param element new element is inserted before this element
* @param iterator new element is inserted before this iterator
* @param[in] item value to insert in list
* @returns SUCCESS if succeeded, FAILED otherwise
* @return SUCCESS if succeeded, FAILED otherwise
*/
status_t (*insert_before) (linked_list_t *linked_list, linked_list_element_t *element, void *item);
status_t (*insert_before) (linked_list_t *linked_list, linked_list_iterator_t *iterator, void *item);
/**
* @brief inserts a new item after the given element
* @brief inserts a new item after the given iterator position
*
* The iterator position is not changed after inserting
*
* @param linked_list calling object
* @param element new element is inserted after this element
* @param iterator new element is inserted after this iterator
* @param[in] item value to insert in list
* @returns SUCCESS if succeeded, FAILED otherwise
* @return SUCCESS if succeeded, FAILED otherwise
*/
status_t (*insert_after) (linked_list_t *linked_list, linked_list_element_t *element, void *item);
status_t (*insert_after) (linked_list_t *linked_list, linked_list_iterator_t *iterator, void *item);
/**
* @brief removes an element from list
* @brief removes an element from list at the given iterator position
*
* The position of the iterator is set in the following order:
* - to the item before, if available
* - otherwise to the item after, if available
* - otherwise it gets reseted
*
* @param linked_list calling object
* @param element element to remove
* @returns SUCCESS if succeeded, FAILED otherwise
* @param iterator iterator holding the position of the element to remove
* @return SUCCESS if succeeded, FAILED otherwise
*/
status_t (*remove) (linked_list_t *linked_list, linked_list_element_t *element);
status_t (*remove) (linked_list_t *linked_list, linked_list_iterator_t *iterator);
/**
* @brief removes the first item in the list and returns its value
*
* @param linked_list calling object
* @param[in] item returned value of first item
* @returns SUCCESS if succeeded, FAILED otherwise
* @return SUCCESS if succeeded, FAILED otherwise
*/
status_t (*remove_first) (linked_list_t *linked_list, void **item);
@@ -188,7 +170,7 @@ struct linked_list_s {
*
* @param linked_list calling object
* @param[out] item returned value of first item
* @returns SUCCESS if succeeded, FAILED otherwise
* @return SUCCESS if succeeded, FAILED otherwise
*/
status_t (*get_first) (linked_list_t *linked_list, void **item);
@@ -197,7 +179,7 @@ struct linked_list_s {
*
* @param linked_list calling object
* @param[in] item value to insert into list
* @returns SUCCESS if succeeded, FAILED otherwise
* @return SUCCESS if succeeded, FAILED otherwise
*/
status_t (*insert_last) (linked_list_t *linked_list, void *item);
@@ -206,7 +188,7 @@ struct linked_list_s {
*
* @param linked_list calling object
* @param[out] item returned value of last item
* @returns SUCCESS if succeeded, FAILED otherwise
* @return SUCCESS if succeeded, FAILED otherwise
*/
status_t (*remove_last) (linked_list_t *linked_list, void **item);
@@ -215,7 +197,7 @@ struct linked_list_s {
*
* @param linked_list calling object
* @param[out] item returned value of last item
* @returns SUCCESS if succeeded, FAILED otherwise
* @return SUCCESS if succeeded, FAILED otherwise
*/
status_t (*get_last) (linked_list_t *linked_list, void **item);
@@ -228,7 +210,7 @@ struct linked_list_s {
* memory leaks!
*
* @param linked_list calling object
* @returns SUCCESS if succeeded, FAILED otherwise
* @return SUCCESS if succeeded, FAILED otherwise
*/
status_t (*destroy) (linked_list_t *linked_list);
};