5 * A priority queue implementation, primarily for keeping track of
6 * commits in the 'date-order' so that we process them from new to old
7 * as they are discovered, but can be used to hold any pointer to
8 * struct. The caller is responsible for supplying a function to
9 * compare two "things".
11 * Alternatively, this data structure can also be used as a LIFO stack
12 * by specifying NULL as the comparison function.
16 * Compare two "things", one and two; the third parameter is cb_data
17 * in the prio_queue structure. The result is returned as a sign of
18 * the return value, being the same as the sign of the result of
19 * subtracting "two" from "one" (i.e. negative if "one" sorts earlier
22 typedef int (*prio_queue_compare_fn
)(const void *one
, const void *two
, void *cb_data
);
24 struct prio_queue_entry
{
30 prio_queue_compare_fn compare
;
31 unsigned insertion_ctr
;
34 struct prio_queue_entry
*array
;
38 * Add the "thing" to the queue.
40 void prio_queue_put(struct prio_queue
*, void *thing
);
43 * Extract the "thing" that compares the smallest out of the queue,
44 * or NULL. If compare function is NULL, the queue acts as a LIFO
47 void *prio_queue_get(struct prio_queue
*);
50 * Gain access to the "thing" that would be returned by
51 * prio_queue_get, but do not remove it from the queue.
53 void *prio_queue_peek(struct prio_queue
*);
55 void clear_prio_queue(struct prio_queue
*);
57 /* Reverse the LIFO elements */
58 void prio_queue_reverse(struct prio_queue
*);
60 #endif /* PRIO_QUEUE_H */