Main Page | Modules | Data Structures | File List | Data Fields | Related Pages

Single-linked list


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 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)

Function Documentation

di_slist* di_slist_alloc void   ) 
 

Allocate a single-linked list

Returns:
a di_slist

00030 { 00031 di_slist *slist; 00032 00033 slist = di_new0 (di_slist, 1); 00034 00035 return slist; 00036 }

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:
slist a di_slist
data the data

00072 { 00073 return internal_di_slist_append (slist, data, di_new (di_slist_node, 1)); 00074 }

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:
slist a di_slist
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_slist_node

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:
slist a di_slist

00039 { 00040 di_slist_node *node, *temp; 00041 00042 node = slist->head; 00043 while (node) 00044 { 00045 temp = node; 00046 node = node->next; 00047 if (destroy_func) 00048 destroy_func (temp->data); 00049 di_free (temp); 00050 } 00051 }

void di_slist_free di_slist slist  ) 
 

Free a single-linked list

Parameters:
slist a di_slist

00054 { 00055 di_free (slist); 00056 }

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:
slist a di_slist
data the data

00093 { 00094 return internal_di_slist_prepend (slist, data, di_new (di_slist_node, 1)); 00095 }

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:
slist a di_slist
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_slist_node

void internal_di_slist_append_list di_slist slist,
di_slist slist_append
 

For internal use only.

00103 { 00104 if (!new->head || !new->bottom) 00105 return; 00106 if (slist->bottom) 00107 slist->bottom->next = new->head; 00108 else 00109 slist->head = new->head; 00110 slist->bottom = new->bottom; 00111 new->head = new->bottom = NULL; 00112 }


Generated on Wed Jun 16 08:14:08 2004 for libdebian-installer by doxygen 1.3.7