*/
struct GNUNET_CONTAINER_HeapNode
{
+ /**
+ * Heap this node belongs to.
+ */
+ struct GNUNET_CONTAINER_Heap *heap;
+
/**
* Parent node.
*/
}
+/**
+ * Get the current cost of the node
+ *
+ * @param node the node to get the cost of
+ * @return cost of the node
+ */
+GNUNET_CONTAINER_HeapCostType
+GNUNET_CONTAINER_heap_node_get_cost (const struct GNUNET_CONTAINER_HeapNode *node)
+{
+ return node->cost;
+}
+
/**
* Iterate over the children of the given node.
*
struct GNUNET_CONTAINER_HeapNode *node;
node = GNUNET_malloc (sizeof (struct GNUNET_CONTAINER_HeapNode));
+ node->heap = heap;
node->element = element;
node->cost = cost;
heap->size++;
* 'size' field of the tree.
*/
static void
-remove_node (struct GNUNET_CONTAINER_Heap *heap,
- struct GNUNET_CONTAINER_HeapNode *node)
+remove_node (struct GNUNET_CONTAINER_HeapNode *node)
{
struct GNUNET_CONTAINER_HeapNode *ancestor;
+ struct GNUNET_CONTAINER_Heap *heap = node->heap;
/* update 'size' of the ancestors */
ancestor = node;
/**
* Removes a node from the heap.
*
- * @param heap heap to modify
* @param node node to remove
* @return element data stored at the node
*/
void *
-GNUNET_CONTAINER_heap_remove_node (struct GNUNET_CONTAINER_Heap *heap,
- struct GNUNET_CONTAINER_HeapNode *node)
+GNUNET_CONTAINER_heap_remove_node (struct GNUNET_CONTAINER_HeapNode *node)
{
void *ret;
-
+ struct GNUNET_CONTAINER_Heap *heap;
+
+ heap = node->heap;
CHECK (heap->root);
if (heap->walk_pos == node)
(void) GNUNET_CONTAINER_heap_walk_get_next (heap);
- remove_node (heap, node);
+ remove_node (node);
heap->size--;
ret = node->element;
if (heap->walk_pos == node)
(heap->size == heap->root->tree_size + 1) );
CHECK (heap->root);
#endif
- remove_node (heap, node);
+ remove_node (node);
#if DEBUG
CHECK (heap->root);
GNUNET_assert ( ( (heap->size == 1) &&