libFirm 1.20
|
Implementation if a double ended queue datastructure for generic pointers. More...
Defines | |
#define | new_waitq() new_pdeq() |
Creates a new pointer wait queue (fifo). | |
#define | del_waitq(wq) del_pdeq(wq) |
Delete a wait queue (fifo) | |
#define | waitq_get(wq) pdeq_getl(wq) |
Retrieve a pointer from the wait queue (fifo). | |
#define | waitq_put(wq, x) pdeq_putr((wq), (x)) |
Add a pointer to the wait queue (fifo). | |
#define | waitq_empty(wq) pdeq_empty(wq) |
Checks if a wait queue is empty. | |
#define | new_stack() new_pdeq() |
Creates a new pointer stack (lifo). | |
#define | stack_pop(st) pdeq_getr(st) |
Pop a pointer from the stack (lifo). | |
#define | stack_push(st, x) pdeq_putr((st), (x)) |
Push a pointer to the stack (lifo). | |
#define | stack_empty(st) pdeq_empty(wq) |
Checks if a stack is empty. | |
Typedefs | |
typedef int(* | cmp_fun )(const void *elem, const void *key) |
The type of the pointer compare function. | |
typedef struct pdeq | pdeq |
The pointer double ended queue (list). | |
typedef pdeq | waitq |
The pdeq is often used as a wait queue. | |
typedef pdeq | stack |
The pdeq can be used as a stack. | |
Functions | |
pdeq * | new_pdeq (void) |
Creates a new double ended pointer list. | |
pdeq * | new_pdeq1 (const void *x) |
Creates a new double ended pointer list and puts an initial pointer element in. | |
void | del_pdeq (pdeq *dq) |
Delete a double ended pointer list. | |
size_t | pdeq_len (pdeq *dq) |
Returns the length of a double ended pointer list. | |
int | pdeq_empty (pdeq *dq) |
Checks if a list is empty. | |
int | pdeq_contains (pdeq *dq, const void *x) |
Returns non-zero if a double ended pointer list contains a pointer x. | |
void * | pdeq_search (pdeq *qp, cmp_fun cmp, const void *key) |
Search a key in a double ended pointer list, the search is controlled by a compare function. | |
void ** | pdeq_copyl (pdeq *qp, const void **dst) |
Convert the double ended pointer list into a linear array beginning from left, the first element in the linear array will be the left one. | |
void ** | pdeq_copyr (pdeq *qp, const void **dst) |
Convert the double ended pointer list into a linear array beginning from right, the first element in the linear array will be the right one. | |
pdeq * | pdeq_putl (pdeq *dq, const void *x) |
Add a pointer to the left side of a double ended pointer list. | |
pdeq * | pdeq_putr (pdeq *dq, const void *x) |
Add a pointer to the right side of a double ended pointer list. | |
void * | pdeq_getl (pdeq *dq) |
Retrieve (and remove) a pointer from the left site of a double ended pointer list. | |
void * | pdeq_getr (pdeq *dq) |
Retrieve (and remove) a pointer from the right site of a double ended pointer list. |
Implementation if a double ended queue datastructure for generic pointers.
#define del_waitq | ( | wq | ) | del_pdeq(wq) |
#define new_stack | ( | ) | new_pdeq() |
#define new_waitq | ( | ) | new_pdeq() |
#define stack_empty | ( | st | ) | pdeq_empty(wq) |
#define stack_pop | ( | st | ) | pdeq_getr(st) |
#define stack_push | ( | st, | |
x | |||
) | pdeq_putr((st), (x)) |
#define waitq_empty | ( | wq | ) | pdeq_empty(wq) |
#define waitq_get | ( | wq | ) | pdeq_getl(wq) |
#define waitq_put | ( | wq, | |
x | |||
) | pdeq_putr((wq), (x)) |
typedef int(* cmp_fun)(const void *elem, const void *key) |
void del_pdeq | ( | pdeq * | dq | ) |
Delete a double ended pointer list.
dq | The list to be deleted. |
pdeq* new_pdeq | ( | void | ) |
Creates a new double ended pointer list.
pdeq* new_pdeq1 | ( | const void * | x | ) |
Creates a new double ended pointer list and puts an initial pointer element in.
x | The pointer element to put in. |
int pdeq_contains | ( | pdeq * | dq, |
const void * | x | ||
) |
Returns non-zero if a double ended pointer list contains a pointer x.
dq | The list. |
x | The pointer to be searched for. |
void** pdeq_copyl | ( | pdeq * | qp, |
const void ** | dst | ||
) |
Convert the double ended pointer list into a linear array beginning from left, the first element in the linear array will be the left one.
qp | The list. |
dst | A pointer to a pointer array with must be at least pdeq_len(dq) * sizeof(void *) |
void** pdeq_copyr | ( | pdeq * | qp, |
const void ** | dst | ||
) |
Convert the double ended pointer list into a linear array beginning from right, the first element in the linear array will be the right one.
qp | The list. |
dst | A pointer to a pointer array with must be at least pdeq_len(dq) * sizeof(void *) |
int pdeq_empty | ( | pdeq * | dq | ) |
Checks if a list is empty.
dq | The list. |
void* pdeq_getl | ( | pdeq * | dq | ) |
Retrieve (and remove) a pointer from the left site of a double ended pointer list.
dq | The list |
void* pdeq_getr | ( | pdeq * | dq | ) |
Retrieve (and remove) a pointer from the right site of a double ended pointer list.
dq | The list |
size_t pdeq_len | ( | pdeq * | dq | ) |
Returns the length of a double ended pointer list.
dq | The list. |
Add a pointer to the left side of a double ended pointer list.
dq | The list to add a pointer to. |
x | The pointer element to be added |
Add a pointer to the right side of a double ended pointer list.
dq | The list to add a pointer to. |
x | The pointer element to be added |
Search a key in a double ended pointer list, the search is controlled by a compare function.
An element is found, if the compare function returns 0. The search is started from the left site of the list.
qp | The list. |
cmp | The compare function. |
key | The search key. |