X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/6532cb48078124e2fcdeda3b8074c4b642a635ac..3af9dcb5714db015a7038a58701b2b453f52c6ca:/src/xbt/heap.c diff --git a/src/xbt/heap.c b/src/xbt/heap.c index 2b153804cd..ac3cafec92 100644 --- a/src/xbt/heap.c +++ b/src/xbt/heap.c @@ -1,6 +1,6 @@ /* a generic and efficient heap */ -/* Copyright (c) 2004, 2005, 2007, 2008, 2009, 2010. The SimGrid Team. +/* Copyright (c) 2004-2005, 2007-2013. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -11,6 +11,7 @@ #include "heap_private.h" #include +XBT_LOG_NEW_DEFAULT_SUBCATEGORY(xbt_heap, xbt, "Heap"); static void xbt_heap_max_heapify(xbt_heap_t H); static void xbt_heap_increase_key(xbt_heap_t H, int i); @@ -95,7 +96,7 @@ void xbt_heap_push(xbt_heap_t H, void *content, double key) if (count > size) { H->size = (size << 1) + 1; H->items = - (void *) realloc(H->items, + (void *) xbt_realloc(H->items, (H->size) * sizeof(struct xbt_heap_item)); } @@ -103,6 +104,7 @@ void xbt_heap_push(xbt_heap_t H, void *content, double key) item->key = key; item->content = content; xbt_heap_increase_key(H, count - 1); + XBT_DEBUG("Heap has now %d elements and max elem is %g",xbt_heap_size(H),xbt_heap_maxkey(H)); return; } @@ -124,6 +126,8 @@ void *xbt_heap_pop(xbt_heap_t H) if (H->count == 0) return NULL; + XBT_DEBUG("Heap has %d elements before extraction and max elem was %g",xbt_heap_size(H),xbt_heap_maxkey(H)); + max = CONTENT(H, 0); items[0] = items[(H->count) - 1]; @@ -132,7 +136,7 @@ void *xbt_heap_pop(xbt_heap_t H) if (H->count < size >> 2 && size > 16) { size = (size >> 1) + 1; H->items = - (void *) realloc(items, + (void *) xbt_realloc(items, size * sizeof(struct xbt_heap_item)); H->size = size; } @@ -145,13 +149,15 @@ void *xbt_heap_pop(xbt_heap_t H) /** * @brief Extracts from the heap and returns the element at position i. * \param H the heap we're working on - * \param i element position + * \param i element position * \return the element at position i if ok, NULL otherwise * * Extracts from the heap and returns the element at position i. The heap is automatically reorded. */ void *xbt_heap_remove(xbt_heap_t H, int i) { + XBT_DEBUG("Heap has %d elements: extracting element %d",xbt_heap_size(H),i); + if ((i < 0) || (i > H->count - 1)) return NULL; /* put element i at head */