From: Arnaud Giersch Date: Tue, 26 Sep 2017 13:14:56 +0000 (+0200) Subject: Change xbt_heap_rm_elm to return the removed element, or NULL. X-Git-Tag: v3_17~74 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/bce15ff3e6e8662b2586202122bbd2698a57abe2 Change xbt_heap_rm_elm to return the removed element, or NULL. --- diff --git a/include/xbt/heap.h b/include/xbt/heap.h index 7e4ea84cc3..27c2a81a58 100644 --- a/include/xbt/heap.h +++ b/include/xbt/heap.h @@ -1,4 +1,4 @@ -/* Copyright (c) 2004-2007, 2009-2011, 2013-2015. The SimGrid Team. +/* Copyright (c) 2004-2007, 2009-2011, 2013-2017. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -29,7 +29,7 @@ XBT_PUBLIC(int) xbt_heap_size(xbt_heap_t H); XBT_PUBLIC(void) xbt_heap_push(xbt_heap_t H, void *content, double key); XBT_PUBLIC(void *) xbt_heap_pop(xbt_heap_t H); -XBT_PUBLIC(void) xbt_heap_rm_elm(xbt_heap_t H, void *content, double key); +XBT_PUBLIC(void *) xbt_heap_rm_elm(xbt_heap_t H, void *content, double key); XBT_PUBLIC(double) xbt_heap_maxkey(xbt_heap_t H); XBT_PUBLIC(void *) xbt_heap_maxcontent(xbt_heap_t H); diff --git a/src/xbt/heap.c b/src/xbt/heap.c index 5bd06f3d8a..2d4964aa5f 100644 --- a/src/xbt/heap.c +++ b/src/xbt/heap.c @@ -158,18 +158,19 @@ void *xbt_heap_remove(xbt_heap_t H, int i) return xbt_heap_pop(H); } + /** @brief Remove an arbitrary element from the heap - * @param H the heap we're working on - * @param content the object you want to add to the heap - * @param key the key associated to this object + * \param H the heap we're working on + * \param content the object you want to remove from the heap + * \param key the key associated to this object + * \return the removed element if found, NULL otherwise */ -void xbt_heap_rm_elm(xbt_heap_t H, void *content, double key) { +void *xbt_heap_rm_elm(xbt_heap_t H, void *content, double key) +{ int i=0; while (i < H->count && (KEY(H, i) != key || CONTENT(H, i) != content)) i++; - if (i == H->count) - return; - xbt_heap_remove(H,i); + return xbt_heap_remove(H, i); } /**