fix
[libfirm] / ir / adt / list.h
index af083a7..8b8f205 100644 (file)
@@ -1,22 +1,9 @@
-/**
- * Linked lists.
- * Shamelessly adapted from the linux kernel.
- */
-
-#ifndef _FIRM_LIST_H
-#define _FIRM_LIST_H
-
-#include "config.h"
-
-/*
- * These are non-NULL pointers that will result in page faults
- * under normal circumstances, used to verify that nobody uses
- * non-initialized list entries.
- */
-#define LIST_POISON1  ((void *) 0x00100100)
-#define LIST_POISON2  ((void *) 0x00200200)
 
-/*
+/**
+ * @file
+ * @brief   Doubly linked lists.
+ * @version $Id$
+ *
  * Simple doubly linked list implementation.
  *
  * Some of the internal functions ("__xxx") are useful when
  * sometimes we already know the next/prev entries and we can
  * generate better code by using them directly rather than
  * using the generic single-entry routines.
- */
+  */
+#ifndef FIRM_ADT_LIST_H
+#define FIRM_ADT_LIST_H
+
+#include "firm_config.h"
 
 struct list_head {
        struct list_head *next, *prev;
@@ -51,40 +42,40 @@ struct list_head {
  * This is only for internal list manipulation where we know
  * the prev/next entries already!
  */
-static INLINE void __list_add(struct list_head *new,
+static INLINE void __list_add(struct list_head *new_node,
                              struct list_head *prev,
                              struct list_head *next)
 {
-       next->prev = new;
-       new->next = next;
-       new->prev = prev;
-       prev->next = new;
+       next->prev = new_node;
+       new_node->next = next;
+       new_node->prev = prev;
+       prev->next = new_node;
 }
 
 /**
  * list_add - add a new entry
- * @new: new entry to be added
- * @head: list head to add it after
+ * @param new_node   new entry to be added
+ * @param head       list head to add it after
  *
  * Insert a new entry after the specified head.
  * This is good for implementing stacks.
  */
-static INLINE void list_add(struct list_head *new, struct list_head *head)
+static INLINE void list_add(struct list_head *new_node, struct list_head *head)
 {
-       __list_add(new, head, head->next);
+       __list_add(new_node, head, head->next);
 }
 
 /**
  * list_add_tail - add a new entry
- * @new: new entry to be added
- * @head: list head to add it before
+ * @param new_node   new entry to be added
+ * @param head       list head to add it before
  *
  * Insert a new entry before the specified head.
  * This is useful for implementing queues.
  */
-static INLINE void list_add_tail(struct list_head *new, struct list_head *head)
+static INLINE void list_add_tail(struct list_head *new_node, struct list_head *head)
 {
-       __list_add(new, head->prev, head);
+       __list_add(new_node, head->prev, head);
 }
 
 /*
@@ -102,21 +93,23 @@ static INLINE void __list_del(struct list_head * prev, struct list_head * next)
 
 /**
  * list_del - deletes entry from list.
- * @entry: the element to delete from the list.
- * Note: list_empty on entry does not return true after this, the entry is
- * in an undefined state.
+ * @param entry  the element to delete from the list.
+ *
+ * @Note
+ *   list_empty on entry does not return true after this, the entry is
+ *   in an undefined state.
  */
 static INLINE void list_del(struct list_head *entry)
 {
        __list_del(entry->prev, entry->next);
-       entry->next = LIST_POISON1;
-       entry->prev = LIST_POISON2;
+       entry->next = NULL;
+       entry->prev = NULL;
 }
 
 
 /**
  * list_del_init - deletes entry from list and reinitialize it.
- * @entry: the element to delete from the list.
+ * @param entry   the element to delete from the list.
  */
 static INLINE void list_del_init(struct list_head *entry)
 {
@@ -126,8 +119,8 @@ static INLINE void list_del_init(struct list_head *entry)
 
 /**
  * list_move - delete from one list and add as another's head
- * @list: the entry to move
- * @head: the head that will precede our entry
+ * @param list   the entry to move
+ * @param head   the head that will precede our entry
  */
 static INLINE void list_move(struct list_head *list, struct list_head *head)
 {
@@ -137,8 +130,8 @@ static INLINE void list_move(struct list_head *list, struct list_head *head)
 
 /**
  * list_move_tail - delete from one list and add as another's tail
- * @list: the entry to move
- * @head: the head that will follow our entry
+ * @param list   the entry to move
+ * @param head   the head that will follow our entry
  */
 static INLINE void list_move_tail(struct list_head *list,
                                  struct list_head *head)
@@ -149,9 +142,9 @@ static INLINE void list_move_tail(struct list_head *list,
 
 /**
  * list_empty - tests whether a list is empty
- * @head: the list to test.
+ * @param head   the list to test.
  */
-static INLINE int list_empty(struct list_head *head)
+static INLINE int list_empty(const struct list_head *head)
 {
        return head->next == head;
 }
@@ -172,8 +165,8 @@ static INLINE void __list_splice(struct list_head *list,
 
 /**
  * list_splice - join two lists
- * @list: the new list to add.
- * @head: the place to add it in the first list.
+ * @param list   the new list to add.
+ * @param head   the place to add it in the first list.
  */
 static INLINE void list_splice(struct list_head *list, struct list_head *head)
 {
@@ -182,11 +175,11 @@ static INLINE void list_splice(struct list_head *list, struct list_head *head)
 }
 
 /**
- * list_splice_init - join two lists and reinitialise the emptied list.
- * @list: the new list to add.
- * @head: the place to add it in the first list.
+ * list_splice_init - join two lists and reinitialize the emptied list.
+ * @param list   the new list to add.
+ * @param head   the place to add it in the first list.
  *
- * The list at @list is reinitialised
+ * The list at list is reinitialized
  */
 static INLINE void list_splice_init(struct list_head *list,
                                    struct list_head *head)
@@ -199,26 +192,25 @@ static INLINE void list_splice_init(struct list_head *list,
 
 /**
  * list_entry - get the struct for this entry
- * @ptr:       the &struct list_head pointer.
- * @type:      the type of the struct this is embedded in.
- * @member:    the name of the list_struct within the struct.
+ * @param ptr     the &struct list_head pointer.
+ * @param type    the type of the struct this is embedded in.
+ * @param member  the name of the list_struct within the struct.
  */
 #define list_entry(ptr, type, member) \
        _list_container_of(ptr, type, member)
 
 /**
  * list_for_each       -       iterate over a list
- * @pos:       the &struct list_head to use as a loop counter.
- * @head:      the head for your list.
+ * @param pos  the &struct list_head to use as a loop counter.
+ * @param head the head for your list.
  */
 #define list_for_each(pos, head) \
-       for (pos = (head)->next, (pos->next); pos != (head); \
-               pos = pos->next, (pos->next))
+       for (pos = (head)->next; pos != (head); pos = pos->next)
 
 /**
  * __list_for_each     -       iterate over a list
- * @pos:       the &struct list_head to use as a loop counter.
- * @head:      the head for your list.
+ * @param pos  the &struct list_head to use as a loop counter.
+ * @param head the head for your list.
  *
  * This variant differs from list_for_each() in that it's the
  * simplest possible list iteration code, no ing is done.
@@ -230,18 +222,17 @@ static INLINE void list_splice_init(struct list_head *list,
 
 /**
  * list_for_each_prev  -       iterate over a list backwards
- * @pos:       the &struct list_head to use as a loop counter.
- * @head:      the head for your list.
+ * @param pos  the &struct list_head to use as a loop counter.
+ * @param head the head for your list.
  */
 #define list_for_each_prev(pos, head) \
-       for (pos = (head)->prev, (pos->prev); pos != (head); \
-               pos = pos->prev, (pos->prev))
+       for (pos = (head)->prev; pos != (head); pos = pos->prev)
 
 /**
  * list_for_each_safe  -       iterate over a list safe against removal of list entry
- * @pos:       the &struct list_head to use as a loop counter.
- * @n:         another &struct list_head to use as temporary storage
- * @head:      the head for your list.
+ * @param pos  the &struct list_head to use as a loop counter.
+ * @param n    another &struct list_head to use as temporary storage
+ * @param head the head for your list.
  */
 #define list_for_each_safe(pos, n, head) \
        for (pos = (head)->next, n = pos->next; pos != (head); \
@@ -249,9 +240,10 @@ static INLINE void list_splice_init(struct list_head *list,
 
 /**
  * list_for_each_entry -       iterate over list of given type
- * @pos:       the type * to use as a loop counter.
- * @head:      the head for your list.
- * @member:    the name of the list_struct within the struct.
+ * @param type    the type of the struct where the listhead is embedded in
+ * @param pos     the type * to use as a loop counter.
+ * @param head    the head for your list.
+ * @param member  the name of the list_struct within the struct.
  */
 #define list_for_each_entry(type, pos, head, member)                           \
        for (pos = list_entry((head)->next, type, member);      \
@@ -260,9 +252,10 @@ static INLINE void list_splice_init(struct list_head *list,
 
 /**
  * list_for_each_entry_reverse - iterate backwards over list of given type.
- * @pos:       the type * to use as a loop counter.
- * @head:      the head for your list.
- * @member:    the name of the list_struct within the struct.
+ * @param type    the type of the struct where the listhead is embedded in
+ * @param pos     the type * to use as a loop counter.
+ * @param head    the head for your list.
+ * @param member  the name of the list_struct within the struct.
  */
 #define list_for_each_entry_reverse(type, pos, head, member)                   \
        for (pos = list_entry((head)->prev, type, member);      \
@@ -272,10 +265,11 @@ static INLINE void list_splice_init(struct list_head *list,
 
 /**
  * list_for_each_entry_safe - iterate over list of given type safe against removal of list entry
- * @pos:       the type * to use as a loop counter.
- * @n:         another type * to use as temporary storage
- * @head:      the head for your list.
- * @member:    the name of the list_struct within the struct.
+ * @param type    the type of the struct where the listhead is embedded in
+ * @param pos     the type * to use as a loop counter.
+ * @param n       another type * to use as temporary storage
+ * @param head    the head for your list.
+ * @param member  the name of the list_struct within the struct.
  */
 #define list_for_each_entry_safe(type, pos, n, head, member)                   \
        for (pos = list_entry((head)->next, type, member),      \