Double linked lists provide fast insertion, removal and iteration in either direction.
Each element has pointers to the next and the previous element.
Iteration can be done by calling the wget_list_browse() function, so the list structure doesn't need to be exposed.
This datatype is used by the Wget tool to implement the job queue (append and remove).
See wget_list_append() for an example on how to use lists.
◆ wget_list_append()
void* wget_list_append |
( |
wget_list_t ** |
list, |
|
|
const void * |
data, |
|
|
size_t |
size |
|
) |
| |
- Parameters
-
[in] | list | Pointer to Pointer to a double linked list |
[in] | data | Pointer to data to be inserted |
[in] | size | Size of data in bytes |
- Returns
- Pointer to the new element
Append an element to the end of the list.
size
bytes at data
will be copied and appended to the list.
A pointer to the new element will be returned.
- Note
- The returned pointer must be freed by wget_list_remove() or implicitly by wget_list_free().
Example:
wget_list_t *list = NULL;
struct mystruct mydata1 = { .x = 1, .y = 25 };
struct mystruct mydata2 = { .x = 5, .y = 99 };
struct mystruct *data;
printf("data=(%d,%d)\n", data->x, data->y);
printf("data=(%d,%d)\n", data->x, data->y);
◆ wget_list_prepend()
void* wget_list_prepend |
( |
wget_list_t ** |
list, |
|
|
const void * |
data, |
|
|
size_t |
size |
|
) |
| |
- Parameters
-
[in] | list | Pointer to Pointer to a double linked list |
[in] | data | Pointer to data to be inserted |
[in] | size | Size of data in bytes |
- Returns
- Pointer to the new element
Insert an entry at the beginning of the list. size
bytes at data
will be copied and prepended to the list.
A pointer to the new element will be returned. It must be freed by wget_list_remove() or implicitely by wget_list_free().
◆ wget_list_remove()
void wget_list_remove |
( |
wget_list_t ** |
list, |
|
|
void * |
elem |
|
) |
| |
- Parameters
-
Remove an element from the list.
◆ wget_list_getfirst()
void* wget_list_getfirst |
( |
const wget_list_t * |
list | ) |
|
- Parameters
-
[in] | list | Pointer to a double linked list |
- Returns
- Pointer to the first element of the list or NULL if the list is empty
Get the first element of a list.
◆ wget_list_getlast()
void* wget_list_getlast |
( |
const wget_list_t * |
list | ) |
|
- Parameters
-
[in] | list | Pointer to a double linked list |
- Returns
- Pointer to the last element of the list or NULL if the list is empty
Get the last element of a list.
◆ wget_list_getnext()
void* wget_list_getnext |
( |
const void * |
elem | ) |
|
- Parameters
-
[in] | elem | Pointer to an element of a linked list |
- Returns
- Pointer to the next element of the list or NULL if the list is empty
Get the next element of a list.
◆ wget_list_browse()
int wget_list_browse |
( |
const wget_list_t * |
list, |
|
|
wget_list_browse_t |
browse, |
|
|
void * |
context |
|
) |
| |
- Parameters
-
[in] | list | Pointer to a double linked list |
[in] | browse | Pointer to callback function which is called for every element in the list. If the callback functions returns a value not equal to zero, browsing is stopped and this value will be returned by wget_list_browse. |
[in] | context | The context handle that will be passed to the callback function |
- Returns
- The return value of the last call to the browse function or -1 if
list
is NULL (empty)
Iterate through all entries of the list
and call the function browse
for each.
wget_list_t *list = NULL;
static int print_elem(void *context, const char *elem)
{
printf("%s\n",elem);
return 0;
}
void dump(WGET_LIST *list)
{
}
◆ wget_list_free()
void wget_list_free |
( |
wget_list_t ** |
list | ) |
|
- Parameters
-
[in] | list | Pointer to Pointer to a double linked list |
Freeing the list and it's entry.