projects
/
libfirm
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
typo
[libfirm]
/
ir
/
adt
/
pqueue.c
diff --git
a/ir/adt/pqueue.c
b/ir/adt/pqueue.c
index
3ce0f1e
..
3e28ace
100644
(file)
--- a/
ir/adt/pqueue.c
+++ b/
ir/adt/pqueue.c
@@
-1,5
+1,5
@@
/*
/*
- * Copyright (C) 1995-20
08
University of Karlsruhe. All right reserved.
+ * Copyright (C) 1995-20
11
University of Karlsruhe. All right reserved.
*
* This file is part of libFirm.
*
*
* This file is part of libFirm.
*
@@
-23,8
+23,11
@@
* @brief Priority Queue implementation based on the heap datastructure
* @version $Id$
*/
* @brief Priority Queue implementation based on the heap datastructure
* @version $Id$
*/
+#include "config.h"
+
#include "array.h"
#include "pqueue.h"
#include "array.h"
#include "pqueue.h"
+#include "error.h"
/*
* Implements a heap.
/*
* Implements a heap.
@@
-43,12
+46,12
@@
*
*/
*
*/
-typedef struct
_
pqueue_el_t {
+typedef struct pqueue_el_t {
void *data;
void *data;
- int
ke
y;
+ int
priorit
y;
} pqueue_el_t;
} pqueue_el_t;
-struct
_
pqueue_t {
+struct pqueue_t {
pqueue_el_t *elems;
};
pqueue_el_t *elems;
};
@@
-56,18
+59,20
@@
struct _pqueue_t {
* Enforces the heap characteristics if the queue
* starting from element at position @p pos.
*/
* Enforces the heap characteristics if the queue
* starting from element at position @p pos.
*/
-static void pqueue_heapify(pqueue_t *q, unsigned pos) {
- unsigned len = ARR_LEN(q->elems);
+static void pqueue_heapify(pqueue_t *q, size_t pos)
+{
+ size_t len = ARR_LEN(q->elems);
while (pos * 2 < len) {
pqueue_el_t tmp;
while (pos * 2 < len) {
pqueue_el_t tmp;
-
unsigned
exchange = pos;
+
size_t
exchange = pos;
- if (q->elems[exchange].
key < q->elems[pos * 2].ke
y) {
+ if (q->elems[exchange].
priority < q->elems[pos * 2].priorit
y) {
exchange = pos * 2;
}
exchange = pos * 2;
}
- if ((pos * 2 + 1) < len && q->elems[exchange].key < q->elems[pos * 2 + 1].key) {
+ if ((pos * 2 + 1) < len
+ && q->elems[exchange].priority < q->elems[pos * 2 + 1].priority) {
exchange = pos * 2 + 1;
}
exchange = pos * 2 + 1;
}
@@
-85,8
+90,9
@@
static void pqueue_heapify(pqueue_t *q, unsigned pos) {
/**
* Sifts up a newly inserted element at position @p pos.
*/
/**
* Sifts up a newly inserted element at position @p pos.
*/
-static void pqueue_sift_up(pqueue_t *q, unsigned pos) {
- while(q->elems[pos].key > q->elems[pos / 2].key) {
+static void pqueue_sift_up(pqueue_t *q, size_t pos)
+{
+ while (q->elems[pos].priority > q->elems[pos / 2].priority) {
pqueue_el_t tmp;
tmp = q->elems[pos];
pqueue_el_t tmp;
tmp = q->elems[pos];
@@
-97,41
+103,42
@@
static void pqueue_sift_up(pqueue_t *q, unsigned pos) {
}
}
}
}
-pqueue_t *new_pqueue(void) {
- pqueue_t *res = xmalloc(sizeof(*res));
+pqueue_t *new_pqueue(void)
+{
+ pqueue_t *res = XMALLOC(pqueue_t);
res->elems = NEW_ARR_F(pqueue_el_t, 0);
return res;
}
res->elems = NEW_ARR_F(pqueue_el_t, 0);
return res;
}
-void del_pqueue(pqueue_t *q) {
+void del_pqueue(pqueue_t *q)
+{
DEL_ARR_F(q->elems);
free(q);
}
DEL_ARR_F(q->elems);
free(q);
}
-void pqueue_put(pqueue_t *q, void *data, int key) {
+void pqueue_put(pqueue_t *q, void *data, int priority)
+{
pqueue_el_t el;
pqueue_el_t el;
- el.data = data;
- el.
key = ke
y;
+ el.data
= data;
+ el.
priority = priorit
y;
ARR_APP1(pqueue_el_t, q->elems, el);
pqueue_sift_up(q, ARR_LEN(q->elems) - 1);
}
ARR_APP1(pqueue_el_t, q->elems, el);
pqueue_sift_up(q, ARR_LEN(q->elems) - 1);
}
-void *pqueue_pop_front(pqueue_t *q) {
- switch(ARR_LEN(q->elems)) {
+void *pqueue_pop_front(pqueue_t *q)
+{
+ switch (ARR_LEN(q->elems)) {
case 0:
case 0:
- assert(0 && "Attempt to retrieve element from empty priority queue.");
- return NULL;
- break;
+ panic("Attempt to retrieve element from empty priority queue.");
case 1:
ARR_SHRINKLEN(q->elems, 0);
return q->elems[0].data;
case 1:
ARR_SHRINKLEN(q->elems, 0);
return q->elems[0].data;
- break;
default: {
default: {
- void *data = q->elems[0].data;
-
int
len = ARR_LEN(q->elems) - 1;
+ void
*data = q->elems[0].data;
+
size_t
len = ARR_LEN(q->elems) - 1;
q->elems[0] = q->elems[len];
ARR_SHRINKLEN(q->elems, len);
q->elems[0] = q->elems[len];
ARR_SHRINKLEN(q->elems, len);
@@
-142,10
+149,12
@@
void *pqueue_pop_front(pqueue_t *q) {
}
}
}
}
-int pqueue_length(const pqueue_t *q) {
+size_t pqueue_length(const pqueue_t *q)
+{
return ARR_LEN(q->elems);
}
return ARR_LEN(q->elems);
}
-int pqueue_empty(const pqueue_t *q) {
+int pqueue_empty(const pqueue_t *q)
+{
return ARR_LEN(q->elems) == 0;
}
return ARR_LEN(q->elems) == 0;
}