*/
void xbt_heap_free(xbt_heap_t H)
{
- int i;
+ if (!H)
+ return;
+
if (H->free)
- for (i = 0; i < H->count; i++)
+ for (int i = 0; i < H->count; i++)
H->free(H->items[i].content);
free(H->items);
free(H);
- return;
}
/**
*/
void xbt_heap_push(xbt_heap_t H, void *content, double key)
{
- int count = ++(H->count);
+ H->count += 1;
+ int count = H->count;
int size = H->size;
xbt_heap_item_t item;
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;
}
/**
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);
}
/**
}
if (H->update_callback)
H->update_callback(items[i].content, i);
- return;
}