Di_list

## Data Structures

struct | di_list
| Double-linked list. More...
struct | di_list_node
| Node of a double-linked list. More...

## Functions

di_list * | di_list_alloc (void)
void | di_list_destroy (di_list *list, di_destroy_notify destroy_func) __attribute__((nonnull(1)))
void | di_list_free (di_list *list)
void | di_list_append (di_list *list, void *data) __attribute__((nonnull(1)))
void | di_list_append_chunk (di_list *list, void *data, di_mem_chunk *mem_chunk) __attribute__((nonnull(1
void void | di_list_prepend (di_list *list, void *data) __attribute__((nonnull(1)))
void | di_list_prepend_chunk (di_list *list, void *data, di_mem_chunk *mem_chunk) __attribute__((nonnull(1

## Detailed Description

## Function Documentation

## di_list_alloc()

di_list * di_list_alloc | ( | void |  | ) |

Allocate a double-linked list

Returns
  a di_list

{
di_list *list;
list = di_new0 (di_list, 1);
return list;
}
di_new0
#define di_new0(struct_type, n_structs)
Definition mem.h:79
di_list
Double-linked list.
Definition list.h:37

References di_new0.

## di_list_append()

void di_list_append | ( | di_list * | list,
|  | void * | data
| ) |  |

Append to a double-linked list

Warning
  don't mix with di_list_append_chunk

Parameters

  list | a di_list
  data | the data

{
return internal_di_list_append (list, data, di_new (di_list_node, 1));
}
di_new
#define di_new(struct_type, n_structs)
Definition mem.h:73
di_list_node
Node of a double-linked list.
Definition list.h:46

References di_new.

## di_list_append_chunk()

void di_list_append_chunk | ( | di_list * | list,
|  | void * | data,
|  | di_mem_chunk * | mem_chunk
| ) |  |

Append to a double-linked list

Warning
  don't mix with di_list_append_chunk

Parameters

  list | a di_list
  data | the data

## di_list_destroy()

void di_list_destroy | ( | di_list * | list,
|  | di_destroy_notify | destroy_func
| ) |  |

Destroy the contents of a double-linked list

Warning
  never use this function with a list which makes use of the chunk allocator

Parameters

  list | a di_list

{
di_list_node *node, *temp;
node = list->head;
while (node)
{
temp = node;
node = node->next;
if (destroy_func)
destroy_func (temp->data);
di_free (temp);
}
}
di_free
void di_free(void *mem)
Definition mem.c:60
di_list_node::data
void * data
Definition list.h:49
di_list_node::next
di_list_node * next
Definition list.h:47
di_list::head
di_list_node * head
Definition list.h:38

References di_list_node::data, di_free(), head, and di_list_node::next.

## di_list_free()

void di_list_free | ( | di_list * | list | ) |

Free a double-linked list

Parameters

  list | a di_list

{
di_free (list);
}

References di_free().

## di_list_prepend()

void void di_list_prepend | ( | di_list * | list,
|  | void * | data
| ) |  |

Prepend to a double-linked list

Warning
  don't mix with di_list_prepend_chunk

Parameters

  list | a di_list
  data | the data

{
return internal_di_list_prepend (list, data, di_new (di_list_node, 1));
}

References di_new.

## di_list_prepend_chunk()

void di_list_prepend_chunk | ( | di_list * | list,
|  | void * | data,
|  | di_mem_chunk * | mem_chunk
| ) |  |

Prepend to a double-linked list

Warning
  don't mix with di_list_prepend

Parameters

  list | a di_list
  data | the data
  mem_chunk | a di_mem_chunk for allocation of new nodes

Precondition
  the di_mem_chunk must return chunks with at least the size of di_list_node