X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fadt%2Fpqueue.c;h=3e28ace07f0d5bc56fb3d6e5088a388f2d59c70c;hb=3debaa818370c243d58f544c5052a218c28ee01c;hp=3fd6a6f156f650aa872582f0b3f3ee5deebaf594;hpb=1a26f4853c07d1ecd68a097409dd602edfe29eff;p=libfirm diff --git a/ir/adt/pqueue.c b/ir/adt/pqueue.c index 3fd6a6f15..3e28ace07 100644 --- a/ir/adt/pqueue.c +++ b/ir/adt/pqueue.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. + * Copyright (C) 1995-2011 University of Karlsruhe. All right reserved. * * This file is part of libFirm. * @@ -27,6 +27,7 @@ #include "array.h" #include "pqueue.h" +#include "error.h" /* * Implements a heap. @@ -45,12 +46,12 @@ * */ -typedef struct _pqueue_el_t { +typedef struct pqueue_el_t { void *data; int priority; } pqueue_el_t; -struct _pqueue_t { +struct pqueue_t { pqueue_el_t *elems; }; @@ -58,13 +59,13 @@ struct _pqueue_t { * Enforces the heap characteristics if the queue * starting from element at position @p pos. */ -static void pqueue_heapify(pqueue_t *q, unsigned pos) +static void pqueue_heapify(pqueue_t *q, size_t pos) { - unsigned len = ARR_LEN(q->elems); + size_t len = ARR_LEN(q->elems); while (pos * 2 < len) { pqueue_el_t tmp; - unsigned exchange = pos; + size_t exchange = pos; if (q->elems[exchange].priority < q->elems[pos * 2].priority) { exchange = pos * 2; @@ -89,7 +90,7 @@ static void pqueue_heapify(pqueue_t *q, unsigned pos) /** * Sifts up a newly inserted element at position @p pos. */ -static void pqueue_sift_up(pqueue_t *q, unsigned pos) +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; @@ -131,16 +132,13 @@ void *pqueue_pop_front(pqueue_t *q) { switch (ARR_LEN(q->elems)) { 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; - break; 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); @@ -151,7 +149,7 @@ 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); }