libdebian-installer
Data Structures | Functions
Di_slist

Data Structures

struct  di_slist
 Single-linked list. More...
 
struct  di_slist_node
 Node of a single-linked list. More...
 

Functions

di_slistdi_slist_alloc (void)
 
void di_slist_destroy (di_slist *slist, di_destroy_notify destroy_func) __attribute__((nonnull(1)))
 
void di_slist_free (di_slist *slist)
 
void di_slist_append (di_slist *slist, void *data) __attribute__((nonnull(1)))
 
void di_slist_append_chunk (di_slist *slist, void *data, di_mem_chunk *mem_chunk) __attribute__((nonnull(1
 
void void di_slist_prepend (di_slist *slist, void *data) __attribute__((nonnull(1)))
 
void di_slist_prepend_chunk (di_slist *slist, void *data, di_mem_chunk *mem_chunk) __attribute__((nonnull(1
 
void internal_di_slist_append_list (di_slist *slist, di_slist *slist_append)
 

Detailed Description

Function Documentation

di_slist* di_slist_alloc ( void  )

Allocate a single-linked list

Returns
a di_slist

References di_new0.

Referenced by di_packages_get_package_new().

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

Append to a single-linked list

Warning
don't mix with di_slist_append_chunk
Parameters
slista di_slist
datathe data

References bottom, di_slist_node::data, di_mem_chunk_alloc(), di_new, di_slist_append_chunk(), head, and di_slist_node::next.

Referenced by di_log_set_handler().

69 {
70  return internal_di_slist_append (slist, data, di_new (di_slist_node, 1));
71 }
Node of a single-linked list.
Definition: slist.h:45
#define di_new(struct_type, n_structs)
Definition: mem.h:73
void di_slist_append_chunk ( di_slist slist,
void *  data,
di_mem_chunk mem_chunk 
)

Append to a single-linked list

Warning
don't mix with di_slist_append
Parameters
slista di_slist
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_slist_node

Referenced by di_package_parser_info(), di_packages_append_package(), di_packages_get_package_new(), di_packages_status_parser_info(), and di_slist_append().

void di_slist_destroy ( di_slist slist,
di_destroy_notify  destroy_func 
)

Destroy the contents of a single-linked list

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

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

36 {
37  di_slist_node *node, *temp;
38 
39  node = slist->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 }
Node of a single-linked list.
Definition: slist.h:45
di_slist_node * head
Definition: slist.h:38
di_slist_node * next
Definition: slist.h:47
void * data
Definition: slist.h:48
void di_free(void *mem)
Definition: mem.c:60
void di_slist_free ( di_slist slist)

Free a single-linked list

Parameters
slista di_slist

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

51 {
52  di_free (slist);
53 }
void di_free(void *mem)
Definition: mem.c:60
void void di_slist_prepend ( di_slist slist,
void *  data 
)

Prepend to a single-linked list

Warning
don't mix with di_slist_prepend_chunk
Parameters
slista di_slist
datathe data

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

90 {
91  return internal_di_slist_prepend (slist, data, di_new (di_slist_node, 1));
92 }
Node of a single-linked list.
Definition: slist.h:45
#define di_new(struct_type, n_structs)
Definition: mem.h:73
void di_slist_prepend_chunk ( di_slist slist,
void *  data,
di_mem_chunk mem_chunk 
)

Prepend to a single-linked list

Warning
don't mix with di_slist_prepend
Parameters
slista di_slist
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_slist_node

Referenced by di_slist_prepend().

void internal_di_slist_append_list ( di_slist slist,
di_slist slist_append 
)

References bottom, head, and di_slist_node::next.

Referenced by di_packages_get_package_new().

100 {
101  if (!new->head || !new->bottom)
102  return;
103  if (slist->bottom)
104  slist->bottom->next = new->head;
105  else
106  slist->head = new->head;
107  slist->bottom = new->bottom;
108  new->head = new->bottom = NULL;
109 }
di_slist_node * head
Definition: slist.h:38
di_slist_node * next
Definition: slist.h:47
di_slist_node * bottom
Definition: slist.h:39