aboutsummaryrefslogtreecommitdiff
path: root/src/util
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2017-01-16 11:24:30 +0100
committerChristian Grothoff <christian@grothoff.org>2017-01-16 11:24:30 +0100
commitd473582634ea55c2a412da1360b05a2898ed568d (patch)
tree39ca0098ac657e5dbc0960469ae05195e2506f60 /src/util
parent301693904d07a063711bfc1ff4c5505c61eaf821 (diff)
downloadgnunet-d473582634ea55c2a412da1360b05a2898ed568d.tar.gz
gnunet-d473582634ea55c2a412da1360b05a2898ed568d.zip
simplify GNUNET_CONTAINER_heap_update_cost API
Diffstat (limited to 'src/util')
-rw-r--r--src/util/container_heap.c27
-rw-r--r--src/util/test_container_heap.c13
2 files changed, 14 insertions, 26 deletions
diff --git a/src/util/container_heap.c b/src/util/container_heap.c
index 4f82fb076..1ead5ec6d 100644
--- a/src/util/container_heap.c
+++ b/src/util/container_heap.c
@@ -541,36 +541,23 @@ GNUNET_CONTAINER_heap_remove_node (struct GNUNET_CONTAINER_HeapNode *node)
541/** 541/**
542 * Updates the cost of any node in the tree 542 * Updates the cost of any node in the tree
543 * 543 *
544 * @param heap heap to modify
545 * @param node node for which the cost is to be changed 544 * @param node node for which the cost is to be changed
546 * @param new_cost new cost for the node 545 * @param new_cost new cost for the node
547 */ 546 */
548void 547void
549GNUNET_CONTAINER_heap_update_cost (struct GNUNET_CONTAINER_Heap *heap, 548GNUNET_CONTAINER_heap_update_cost (struct GNUNET_CONTAINER_HeapNode *node,
550 struct GNUNET_CONTAINER_HeapNode *node,
551 GNUNET_CONTAINER_HeapCostType new_cost) 549 GNUNET_CONTAINER_HeapCostType new_cost)
552{ 550{
553#if EXTRA_CHECKS 551 struct GNUNET_CONTAINER_Heap *heap = node->heap;
554 GNUNET_assert (((heap->size == 0) && (heap->root == NULL)) || 552
555 (heap->size == heap->root->tree_size + 1));
556 CHECK (heap->root);
557#endif
558 remove_node (node); 553 remove_node (node);
559#if EXTRA_CHECKS
560 CHECK (heap->root);
561 GNUNET_assert (((heap->size == 1) && (heap->root == NULL)) ||
562 (heap->size == heap->root->tree_size + 2));
563#endif
564 node->cost = new_cost; 554 node->cost = new_cost;
565 if (heap->root == NULL) 555 if (NULL == heap->root)
566 heap->root = node; 556 heap->root = node;
567 else 557 else
568 insert_node (heap, heap->root, node); 558 insert_node (heap,
569#if EXTRA_CHECKS 559 heap->root,
570 CHECK (heap->root); 560 node);
571 GNUNET_assert (((heap->size == 0) && (heap->root == NULL)) ||
572 (heap->size == heap->root->tree_size + 1));
573#endif
574} 561}
575 562
576 563
diff --git a/src/util/test_container_heap.c b/src/util/test_container_heap.c
index f115159bf..82b0e9523 100644
--- a/src/util/test_container_heap.c
+++ b/src/util/test_container_heap.c
@@ -28,7 +28,8 @@
28#include "gnunet_util_lib.h" 28#include "gnunet_util_lib.h"
29 29
30static int 30static int
31iterator_callback (void *cls, struct GNUNET_CONTAINER_HeapNode *node, 31iterator_callback (void *cls,
32 struct GNUNET_CONTAINER_HeapNode *node,
32 void *element, GNUNET_CONTAINER_HeapCostType cost) 33 void *element, GNUNET_CONTAINER_HeapCostType cost)
33{ 34{
34 return GNUNET_OK; 35 return GNUNET_OK;
@@ -93,12 +94,12 @@ check ()
93 GNUNET_CONTAINER_heap_iterate (myHeap, &iterator_callback, NULL); 94 GNUNET_CONTAINER_heap_iterate (myHeap, &iterator_callback, NULL);
94 95
95 n3 = GNUNET_CONTAINER_heap_insert (myHeap, "15", 5); 96 n3 = GNUNET_CONTAINER_heap_insert (myHeap, "15", 5);
96 GNUNET_CONTAINER_heap_update_cost (myHeap, n3, 15); 97 GNUNET_CONTAINER_heap_update_cost (n3, 15);
97 GNUNET_assert (2 == GNUNET_CONTAINER_heap_get_size (myHeap)); 98 GNUNET_assert (2 == GNUNET_CONTAINER_heap_get_size (myHeap));
98 GNUNET_CONTAINER_heap_iterate (myHeap, &iterator_callback, NULL); 99 GNUNET_CONTAINER_heap_iterate (myHeap, &iterator_callback, NULL);
99 100
100 n4 = GNUNET_CONTAINER_heap_insert (myHeap, "50", 50); 101 n4 = GNUNET_CONTAINER_heap_insert (myHeap, "50", 50);
101 GNUNET_CONTAINER_heap_update_cost (myHeap, n4, 50); 102 GNUNET_CONTAINER_heap_update_cost (n4, 50);
102 GNUNET_assert (3 == GNUNET_CONTAINER_heap_get_size (myHeap)); 103 GNUNET_assert (3 == GNUNET_CONTAINER_heap_get_size (myHeap));
103 GNUNET_CONTAINER_heap_iterate (myHeap, &iterator_callback, NULL); 104 GNUNET_CONTAINER_heap_iterate (myHeap, &iterator_callback, NULL);
104 105
@@ -109,7 +110,7 @@ check ()
109 r = GNUNET_CONTAINER_heap_remove_root (myHeap); /* n1 */ 110 r = GNUNET_CONTAINER_heap_remove_root (myHeap); /* n1 */
110 GNUNET_assert (NULL != r); 111 GNUNET_assert (NULL != r);
111 GNUNET_assert (0 == strcmp ("11", r)); 112 GNUNET_assert (0 == strcmp ("11", r));
112 GNUNET_CONTAINER_heap_update_cost (myHeap, n6, 200); 113 GNUNET_CONTAINER_heap_update_cost (n6, 200);
113 GNUNET_CONTAINER_heap_remove_node (n3); 114 GNUNET_CONTAINER_heap_remove_node (n3);
114 r = GNUNET_CONTAINER_heap_remove_root (myHeap); /* n4 */ 115 r = GNUNET_CONTAINER_heap_remove_root (myHeap); /* n4 */
115 GNUNET_assert (NULL != r); 116 GNUNET_assert (NULL != r);
@@ -128,7 +129,7 @@ check ()
128 myHeap = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN); 129 myHeap = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MIN);
129 130
130 n1 = GNUNET_CONTAINER_heap_insert (myHeap, "10", 10); 131 n1 = GNUNET_CONTAINER_heap_insert (myHeap, "10", 10);
131 GNUNET_CONTAINER_heap_update_cost (myHeap, n1, 15); 132 GNUNET_CONTAINER_heap_update_cost (n1, 15);
132 133
133 r = GNUNET_CONTAINER_heap_remove_node (n1); 134 r = GNUNET_CONTAINER_heap_remove_node (n1);
134 GNUNET_assert (NULL != r); 135 GNUNET_assert (NULL != r);
@@ -213,7 +214,7 @@ check ()
213 myHeap = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MAX); 214 myHeap = GNUNET_CONTAINER_heap_create (GNUNET_CONTAINER_HEAP_ORDER_MAX);
214 215
215 n1 = GNUNET_CONTAINER_heap_insert (myHeap, "10", 10); 216 n1 = GNUNET_CONTAINER_heap_insert (myHeap, "10", 10);
216 GNUNET_CONTAINER_heap_update_cost (myHeap, n1, 15); 217 GNUNET_CONTAINER_heap_update_cost (n1, 15);
217 218
218 GNUNET_assert (0 == nstrcmp ("10", GNUNET_CONTAINER_heap_remove_node (n1))); 219 GNUNET_assert (0 == nstrcmp ("10", GNUNET_CONTAINER_heap_remove_node (n1)));
219 220