X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=ir%2Fadt%2Fpqueue.c;h=6e43abf7c1a3e88c7f14c66cfc1c3b0784f96706;hb=d44b3844af84684de9b0213b77c175f80f8b84ee;hp=77ed3738a4cc9d67eaf629edfbecc3c8913ab420;hpb=85bf7bdbde714576054cc8a79e07c5255daf6024;p=libfirm diff --git a/ir/adt/pqueue.c b/ir/adt/pqueue.c index 77ed3738a..6e43abf7c 100644 --- a/ir/adt/pqueue.c +++ b/ir/adt/pqueue.c @@ -1,7 +1,32 @@ +/* + * Copyright (C) 1995-2008 University of Karlsruhe. All right reserved. + * + * This file is part of libFirm. + * + * This file may be distributed and/or modified under the terms of the + * GNU General Public License version 2 as published by the Free Software + * Foundation and appearing in the file LICENSE.GPL included in the + * packaging of this file. + * + * Licensees holding valid libFirm Professional Edition licenses may use + * this file in accordance with the libFirm Commercial License. + * Agreement provided with the Software. + * + * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE + * WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE. + */ + +/** + * @file + * @author Christian Wuerdig, Matthias Braun + * @brief Priority Queue implementation based on the heap datastructure + * @version $Id$ + */ #include "array.h" #include "pqueue.h" -/** +/* * Implements a heap. * * Implementation note: It might seem strange that we start indexing at 0 @@ -15,7 +40,6 @@ * implementations or the ugly (i+1)*2 - 1 and (i+1)*2 for calculating the * left and right child. (At the expense that stuff easily breaks when you make * changes and don't think that the left child of 0 is 0 :-/) - * @author matze * */ @@ -32,12 +56,12 @@ struct _pqueue_t { * Enforces the heap characteristics if the queue * starting from element at position @p pos. */ -static void pqueue_heapify(pqueue *q, int pos) { - int len = ARR_LEN(q->elems); +static void pqueue_heapify(pqueue *q, unsigned pos) { + unsigned len = ARR_LEN(q->elems); while (pos * 2 < len) { pqueue_el_t tmp; - int exchange = pos; + unsigned exchange = pos; if (q->elems[exchange].key < q->elems[pos * 2].key) { exchange = pos * 2; @@ -61,7 +85,7 @@ static void pqueue_heapify(pqueue *q, int pos) { /** * Sifts up a newly inserted element at position @p pos. */ -static void pqueue_sift_up(pqueue *q, int pos) { +static void pqueue_sift_up(pqueue *q, unsigned pos) { while(q->elems[pos].key > q->elems[pos / 2].key) { pqueue_el_t tmp;