Data Structures | Functions

Double-linked 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

Function Documentation

di_list* di_list_alloc ( void   ) 

Allocate a double-linked list

Returns:
a di_list

References di_new0.

{
  di_list *list;

  list = di_new0 (di_list, 1);

  return list;
}

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

References di_new.

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

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

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

{
  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);
  }
}

void di_list_free ( di_list list  ) 

Free a double-linked list

Parameters:
list a di_list

References di_free().

{
  di_free (list);
}

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

References di_new.

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

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