* Removed all Id tags.
[cacao.git] / src / toolbox / list.h
index c0fd452008bff5c602b9e9fe82fdb3c9c42ff2f3..f84f5e39806621f3beb446ae14408164f6d9f121 100644 (file)
@@ -1,6 +1,6 @@
-/* src/toolbox/list.h - 
+/* src/toolbox/list.h - synchronized linked list
 
-   Copyright (C) 1996-2005, 2006 R. Grafl, A. Krall, C. Kruegel,
+   Copyright (C) 1996-2005, 2006, 2007 R. Grafl, A. Krall, C. Kruegel,
    C. Oates, R. Obermaisser, M. Platter, M. Probst, S. Ring,
    E. Steiner, C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich,
    J. Wenninger, Institut f. Computersprachen - TU Wien
    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
    02110-1301, USA.
 
-   Contact: cacao@cacaojvm.org
-
-   Authors: Reinhard Grafl
-
-   Changes: Christian Thalinger
-
-   $Id: list.h 4394 2006-01-31 22:27:23Z twisti $
-
 */
 
 
 #ifndef _LIST_H
 #define _LIST_H
 
+#include "config.h"
+#include "vm/types.h"
+
+#include "vm/global.h"
+
+
 /* ---------------------- interface description -----------------------------
 
 The list management with this module works like this:
@@ -93,35 +91,58 @@ distinct list).
 
 */
 
-typedef struct listnode {           /* structure for list element */
-       struct listnode *next;
-       struct listnode *prev;
-} listnode;
+/* listnode_t *****************************************************************/
+
+typedef struct listnode_t listnode_t;
 
+struct listnode_t {
+       listnode_t *next;
+       listnode_t *prev;
+};
 
-typedef struct list {               /* structure for list head */
-       listnode *first;
-       listnode *last;
-       int nodeoffset;
-} list;
+
+/* list_t *********************************************************************/
+
+typedef struct list_t list_t;
+
+struct list_t {
+#if defined(ENABLE_THREADS)
+       java_object_t      lock;            /* threads lock object                */
+#endif
+       listnode_t        *first;
+       listnode_t        *last;
+       s4                 nodeoffset;
+       s4                 size;            /* number of elements in the list     */
+};
 
 
 /* function prototypes ********************************************************/
 
-void list_init(list *l, int nodeoffset);
+list_t *list_create(s4 nodeoffset);
+list_t *list_create_dump(s4 nodeoffset);
+
+void    list_add_first(list_t *l, void *element);
+void    list_add_first_unsynced(list_t *l, void *element);
+
+void    list_add_last(list_t *l, void *element);
+void    list_add_last_unsynced(list_t *l, void *element);
+
+void    list_add_before(list_t *l, void *element, void *newelement);
+
+void    list_remove(list_t *l, void *element);
+void    list_remove_unsynced(list_t *l, void *element);
 
-void list_addfirst(list *l, void *element);
-void list_addlast(list *l, void *element);
+void   *list_first(list_t *l);
+void   *list_first_unsynced(list_t *l);
 
-void list_add_before(list *l, void *element, void *newelement);
+void   *list_last(list_t *l);
+void   *list_last_unsynced(list_t *l);
 
-void list_remove(list *l, void *element);
-void *list_first(list *l);
-void *list_last(list *l);
+void   *list_next(list_t *l, void *element);
+void   *list_next_unsynced(list_t *l, void *element);
 
-void *list_next(list *l, void *element);
-void *list_prev(list *l, void *element);
+void   *list_prev(list_t *l, void *element);
+void   *list_prev_unsynced(list_t *l, void *element);
 
 #endif /* _LIST_H */