#include <starpu_util.h>
Go to the source code of this file.
|
#define | LIST_INLINE |
|
#define | struct |
|
#define | LIST_CREATE_TYPE(ENAME, DECL) |
|
#define | LIST_CREATE_TYPE_NOSTRUCT(ENAME, _prev, _next) |
|
#define | STARPU_ASSERT_MULTILIST(expr) |
|
#define | MULTILIST_CREATE_TYPE(ENAME, MEMBER) |
|
#define | MULTILIST_CREATE_INLINES(TYPE, ENAME, MEMBER) |
|
◆ LIST_INLINE
- declares the following types:
- for cells : struct FOO
- for lists : struct FOO_list
- for iterators : struct FOO
- declares the following inlines (all O(1) except stated otherwise, n is the number of elements) :
- Create a cell struct FOO* FOO_new(void);
- Suppress a cell void FOO_delete(struct FOO*);
- Create a list (initially empty) struct FOO_list* FOO_list_new(void);
- Initializes a list (initially empty) void FOO_list_init(struct FOO_list*);
- Initializes a list (initially empty), assuming that the content of FOO_list was already zeroed void FOO_list_init0(struct FOO_list*);
- Suppresses a liste void FOO_list_delete(struct FOO_list*);
- Check whether a list is empty int FOO_list_empty(struct FOO_list*);
- Remove a given cell from the list void FOO_list_erase(struct FOO_list*, struct FOO*);
- Add a cell at the back of the list void FOO_list_push_back(struct FOO_list*, struct FOO*);
- Add a cell at the front of the list void FOO_list_push_front(struct FOO_list*, struct FOO*);
- Add a cell before a given cell of a list void FOO_list_insert_before(struct FOO_list*, struct FOO*new, struct FOO*);
- Add a cell after a given cell of a list void FOO_list_insert_after(struct FOO_list*, struct FOO*new, struct FOO*);
- Append the second list at the end of the first list struct FOO* FOO_list_push_list_back(struct FOO_list*, struct FOO_list*);
- Prepend the first list at the beginning of the second list struct FOO* FOO_list_push_list_front(struct FOO_list*, struct FOO_list*);
- Return and remove the node at the back of the list struct FOO* FOO_list_pop_back(struct FOO_list*);
- Return and remove the node at the front of the list struct FOO* FOO_list_pop_front(struct FOO_list*);
- Return the node at the back of the list struct FOO* FOO_list_back(struct FOO_list*);
- Return the node at the front of the list struct FOO* FOO_list_front(struct FOO_list*);
- Check that the list chaining is coherent (O(n)) int FOO_list_check(struct FOO_list*);
- Return the first cell of the list (from the front) struct FOO* FOO_list_begin(struct FOO_list*);
- Return the value to be tested at the end of the list (at the back) struct FOO* FOO_list_end(struct FOO_list*);
- Return the next element of the list (from the front) struct FOO* FOO_list_next(struct FOO*)
- Return the last element of the list (from the back) struct FOO* FOO_list_last(struct FOO_list*);
- Return the value to be tested at the beginning of the list (at the front) struct FOO* FOO_list_alpha(struct FOO_list*);
- Return the previous element of the list (from the back) struct FOO* FOO_list_prev(struct FOO*)
- Return the size of the list in O(n) int FOO_list_size(struct FOO_list*)
- Return the position of the cell in the list (indexed from 0) (O(n) on average) int FOO_list_member(struct FOO_list*, struct FOO*)
- Test whether the cell is in the list (O(n) on average) int FOO_list_ismember(struct FOO_list*, struct FOO*)
Usage example:
- initially you'd have: struct my_struct { int a; int b; };
- to make a list of it, we replace the declaration above with: struct my_struct { int a; int b; ); which creates the struct my_struct and struct my_struct_list types.
- setting up an empty list: struct my_struct_list l; my_struct_list_init(&l);
- allocating an empty list: struct my_struct_list * l = my_struct_list_new();
- add a cell 'e' at the front of list 'l': struct my_struct * e = my_struct_new(); e->a = 0; e->b = 0; my_struct_list_push_front(&l, e);
- iterating over a list from the front: struct my_struct * i; for(i = my_struct_list_begin(&l); i != my_struct_list_end(&l); i = my_struct_list_next(i)) { printf("a=%d; b=%d\n", i->a, i->b); }
- iterating over a list from the back: struct my_struct * i; for(i = my_struct_list_last(&l); i != my_struct_list_alpha(&l); i = my_struct_list_prev(i)) { printf("a=%d; b=%d\n", i->a, i->b); }
◆ struct
Generates a new type for list of elements
◆ LIST_CREATE_TYPE_NOSTRUCT
#define LIST_CREATE_TYPE_NOSTRUCT |
( |
|
ENAME, |
|
|
|
_prev, |
|
|
|
_next |
|
) |
| |
The effective type declaration for lists