libdebian-installer
Data Structures | Functions
Di_list

Data Structures

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

Functions

di_listdi_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

References di_new0.

27 {
28  di_list *list;
29 
30  list = di_new0 (di_list, 1);
31 
32  return list;
33 }
Double-linked list.
Definition: list.h:36
#define di_new0(struct_type, n_structs)
Definition: mem.h:79

◆ 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
lista di_list
datathe data

References bottom, di_list_node::data, di_list_append_chunk(), di_mem_chunk_alloc(), di_new, head, di_hash_table::mem_chunk, di_list_node::next, and di_list_node::prev.

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

◆ 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
lista di_list
datathe data

Referenced by di_list_append().

◆ 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
lista di_list

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

36 {
37  di_list_node *node, *temp;
38 
39  node = list->head;
40  while (node)
41  {
42  temp = node;
43  node = node->next;
44  if (destroy_func)
45  destroy_func (temp->data);
46  di_free (temp);
47  }
48 }
di_list_node * head
Definition: list.h:38
void * data
Definition: list.h:49
di_list_node * next
Definition: list.h:47
Node of a double-linked list.
Definition: list.h:45
void di_free(void *mem)
Definition: mem.c:60

◆ di_list_free()

void di_list_free ( di_list list)

Free a double-linked list

Parameters
lista di_list

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

51 {
52  di_free (list);
53 }
void di_free(void *mem)
Definition: mem.c:60

◆ 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
lista di_list
datathe data

References di_list_prepend_chunk(), di_mem_chunk_alloc(), and di_new.

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

◆ 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
lista di_list
datathe data
mem_chunka 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

Referenced by di_list_prepend().