diff options
author | Christian Grothoff <christian@grothoff.org> | 2017-01-16 11:24:30 +0100 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2017-01-16 11:24:30 +0100 |
commit | d473582634ea55c2a412da1360b05a2898ed568d (patch) | |
tree | 39ca0098ac657e5dbc0960469ae05195e2506f60 /src/util | |
parent | 301693904d07a063711bfc1ff4c5505c61eaf821 (diff) | |
download | gnunet-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.c | 27 | ||||
-rw-r--r-- | src/util/test_container_heap.c | 13 |
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 | */ |
548 | void | 547 | void |
549 | GNUNET_CONTAINER_heap_update_cost (struct GNUNET_CONTAINER_Heap *heap, | 548 | GNUNET_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 | ||
30 | static int | 30 | static int |
31 | iterator_callback (void *cls, struct GNUNET_CONTAINER_HeapNode *node, | 31 | iterator_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 | ||