-/* 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:
*/
-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 */