1 #ifndef BABELTRACE_GRAPH_NOTIFICATION_HEAP_H
2 #define BABELTRACE_GRAPH_NOTIFICATION_HEAP_H
5 * Babeltrace - Notification Heap
7 * Copyright (c) 2011 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
8 * Copyright (c) 2016 Jérémie Galarneau <jeremie.galarneau@efficios.com>
10 * Permission is hereby granted, free of charge, to any person obtaining a copy
11 * of this software and associated documentation files (the "Software"), to deal
12 * in the Software without restriction, including without limitation the rights
13 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
14 * copies of the Software, and to permit persons to whom the Software is
15 * furnished to do so, subject to the following conditions:
17 * The above copyright notice and this permission notice shall be included in
18 * all copies or substantial portions of the Software.
20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
21 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
23 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
24 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
25 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30 #include <babeltrace/graph/notification.h>
31 #include <babeltrace/types.h>
34 * bt_notification_time_compare - Compare two notifications' timestamps
36 * Compare two notifications in the time domain. Return true if 'a' happened
37 * prior to 'b'. In the case where both notifications are deemed to have
38 * happened at the same time, an implementation-defined critarion shall be
39 * used to order the notifications. This criterion shall ensure a consistent
40 * ordering over multiple runs.
42 typedef bt_bool (*bt_notification_time_compare_func
)(
43 struct bt_notification
*a
, struct bt_notification
*b
,
47 * bt_notification_heap_create - create a new bt_notification heap.
49 * @comparator: Function to use for notification comparisons.
51 * Returns a new notification heap, NULL on error.
53 extern struct bt_notification_heap
*bt_notification_heap_create(
54 bt_notification_time_compare_func comparator
, void *user_data
);
57 * bt_notification_heap_insert - insert an element into the heap
59 * @heap: the heap to be operated on
60 * @notification: the notification to add
62 * Insert a notification into the heap.
64 * Returns 0 on success, a negative value on error.
66 extern int bt_notification_heap_insert(struct bt_notification_heap
*heap
,
67 struct bt_notification
*notification
);
70 * bt_notification_heap_peek - return the element on top of the heap.
72 * @heap: the heap to be operated on
74 * Returns the top element of the heap, without performing any modification
75 * to the heap structure. Returns NULL if the heap is empty. The returned
76 * notification must be bt_put() by the caller.
78 extern struct bt_notification
*bt_notification_heap_peek(
79 struct bt_notification_heap
*heap
);
82 * bt_notification_heap_pop - remove the element sitting on top of the heap.
83 * @heap: the heap to be operated on
85 * Returns the top element of the heap. The element is removed from the
86 * heap. Returns NULL if the heap is empty. The returned notification must be
87 * bt_put() by the caller.
89 extern struct bt_notification
*bt_notification_heap_pop(
90 struct bt_notification_heap
*heap
);
92 #endif /* BABELTRACE_GRAPH_NOTIFICATION_HEAP_H */