A
lgorithmique
N
umérique
D
istribuée
Public GIT Repository
projects
/
simgrid.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Do not request status if not requested by caller.
[simgrid.git]
/
src
/
xbt
/
heap.c
diff --git
a/src/xbt/heap.c
b/src/xbt/heap.c
index
ed70485
..
2eced61
100644
(file)
--- a/
src/xbt/heap.c
+++ b/
src/xbt/heap.c
@@
-1,8
+1,7
@@
-/* $Id$ */
-
/* a generic and efficient heap */
/* a generic and efficient heap */
-/* Copyright (c) 2004 Arnaud Legrand. All rights reserved. */
+/* Copyright (c) 2004, 2005, 2007, 2008, 2009, 2010. The SimGrid Team.
+ * All rights reserved. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
@@
-26,7
+25,8
@@
*
* Creates a new heap.
*/
*
* Creates a new heap.
*/
-xbt_heap_t xbt_heap_new(int init_size, void_f_pvoid_t const free_func)
+XBT_INLINE xbt_heap_t xbt_heap_new(int init_size,
+ void_f_pvoid_t const free_func)
{
xbt_heap_t H = xbt_new0(struct xbt_heap, 1);
H->size = init_size;
{
xbt_heap_t H = xbt_new0(struct xbt_heap, 1);
H->size = init_size;
@@
-41,8
+41,10
@@
xbt_heap_t xbt_heap_new(int init_size, void_f_pvoid_t const free_func)
* @param H the heap we're working on
* \param update_callback function to call on each element to update its index when needed.
*/
* @param H the heap we're working on
* \param update_callback function to call on each element to update its index when needed.
*/
-void xbt_heap_set_update_callback(xbt_heap_t H,
- void (*update_callback) (void *, int))
+XBT_INLINE void xbt_heap_set_update_callback(xbt_heap_t H,
+ void (*update_callback) (void
+ *,
+ int))
{
H->update_callback = update_callback;
}
{
H->update_callback = update_callback;
}
@@
-68,7
+70,7
@@
void xbt_heap_free(xbt_heap_t H)
* @param H the heap we're working on
* @return the number of elements in the heap
*/
* @param H the heap we're working on
* @return the number of elements in the heap
*/
-int xbt_heap_size(xbt_heap_t H)
+
XBT_INLINE
int xbt_heap_size(xbt_heap_t H)
{
return (H->count);
}
{
return (H->count);
}
@@
-91,7
+93,8
@@
void xbt_heap_push(xbt_heap_t H, void *content, double key)
if (count > size) {
H->size = 2 * size + 1;
H->items =
if (count > size) {
H->size = 2 * size + 1;
H->items =
- (void *) realloc(H->items, (H->size) * sizeof(struct xbt_heapItem));
+ (void *) realloc(H->items,
+ (H->size) * sizeof(struct xbt_heapItem));
}
item = &(H->items[count - 1]);
}
item = &(H->items[count - 1]);
@@
-125,10
+128,12
@@
void *xbt_heap_pop(xbt_heap_t H)
if (H->count < H->size / 4 && H->size > 16) {
H->size = H->size / 2 + 1;
H->items =
if (H->count < H->size / 4 && H->size > 16) {
H->size = H->size / 2 + 1;
H->items =
- (void *) realloc(H->items, (H->size) * sizeof(struct xbt_heapItem));
+ (void *) realloc(H->items,
+ (H->size) * sizeof(struct xbt_heapItem));
}
}
- H->update_callback ? H->update_callback(max, -1) : NULL;
+ if (H->update_callback)
+ H->update_callback(max, -1);
return max;
}
return max;
}
@@
-159,7
+164,7
@@
void *xbt_heap_remove(xbt_heap_t H, int i)
*
* \return the smallest key in the heap without modifying the heap.
*/
*
* \return the smallest key in the heap without modifying the heap.
*/
-double xbt_heap_maxkey(xbt_heap_t H)
+
XBT_INLINE
double xbt_heap_maxkey(xbt_heap_t H)
{
xbt_assert0(H->count != 0, "Empty heap");
return KEY(H, 0);
{
xbt_assert0(H->count != 0, "Empty heap");
return KEY(H, 0);
@@
-199,10
+204,12
@@
static void xbt_heap_maxHeapify(xbt_heap_t H)
struct xbt_heapItem tmp = H->items[i];
H->items[i] = H->items[greatest];
H->items[greatest] = tmp;
struct xbt_heapItem tmp = H->items[i];
H->items[i] = H->items[greatest];
H->items[greatest] = tmp;
- H->update_callback ? H->update_callback(CONTENT(H, i), i) : NULL;
+ if (H->update_callback)
+ H->update_callback(CONTENT(H, i), i);
i = greatest;
} else {
i = greatest;
} else {
- H->update_callback ? H->update_callback(CONTENT(H, i), i) : NULL;
+ if (H->update_callback)
+ H->update_callback(CONTENT(H, i), i);
return;
}
}
return;
}
}
@@
-221,10
+228,11
@@
static void xbt_heap_increaseKey(xbt_heap_t H, int i)
struct xbt_heapItem tmp = H->items[i];
H->items[i] = H->items[PARENT(i)];
H->items[PARENT(i)] = tmp;
struct xbt_heapItem tmp = H->items[i];
H->items[i] = H->items[PARENT(i)];
H->items[PARENT(i)] = tmp;
- H->update_callback ? H->update_callback(CONTENT(H, i), i) : NULL;
+ if (H->update_callback)
+ H->update_callback(CONTENT(H, i), i);
i = PARENT(i);
}
i = PARENT(i);
}
- H->update_callback ? H->update_callback(CONTENT(H, i), i) : NULL;
+ if (H->update_callback)
+ H->update_callback(CONTENT(H, i), i);
return;
}
return;
}
-