Adding upstream version 1:2.47.2.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
This commit is contained in:
parent
fd5a0bafa2
commit
54102a2c29
4535 changed files with 1510258 additions and 0 deletions
60
prio-queue.h
Normal file
60
prio-queue.h
Normal file
|
@ -0,0 +1,60 @@
|
|||
#ifndef PRIO_QUEUE_H
|
||||
#define PRIO_QUEUE_H
|
||||
|
||||
/*
|
||||
* A priority queue implementation, primarily for keeping track of
|
||||
* commits in the 'date-order' so that we process them from new to old
|
||||
* as they are discovered, but can be used to hold any pointer to
|
||||
* struct. The caller is responsible for supplying a function to
|
||||
* compare two "things".
|
||||
*
|
||||
* Alternatively, this data structure can also be used as a LIFO stack
|
||||
* by specifying NULL as the comparison function.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Compare two "things", one and two; the third parameter is cb_data
|
||||
* in the prio_queue structure. The result is returned as a sign of
|
||||
* the return value, being the same as the sign of the result of
|
||||
* subtracting "two" from "one" (i.e. negative if "one" sorts earlier
|
||||
* than "two").
|
||||
*/
|
||||
typedef int (*prio_queue_compare_fn)(const void *one, const void *two, void *cb_data);
|
||||
|
||||
struct prio_queue_entry {
|
||||
unsigned ctr;
|
||||
void *data;
|
||||
};
|
||||
|
||||
struct prio_queue {
|
||||
prio_queue_compare_fn compare;
|
||||
unsigned insertion_ctr;
|
||||
void *cb_data;
|
||||
int alloc, nr;
|
||||
struct prio_queue_entry *array;
|
||||
};
|
||||
|
||||
/*
|
||||
* Add the "thing" to the queue.
|
||||
*/
|
||||
void prio_queue_put(struct prio_queue *, void *thing);
|
||||
|
||||
/*
|
||||
* Extract the "thing" that compares the smallest out of the queue,
|
||||
* or NULL. If compare function is NULL, the queue acts as a LIFO
|
||||
* stack.
|
||||
*/
|
||||
void *prio_queue_get(struct prio_queue *);
|
||||
|
||||
/*
|
||||
* Gain access to the "thing" that would be returned by
|
||||
* prio_queue_get, but do not remove it from the queue.
|
||||
*/
|
||||
void *prio_queue_peek(struct prio_queue *);
|
||||
|
||||
void clear_prio_queue(struct prio_queue *);
|
||||
|
||||
/* Reverse the LIFO elements */
|
||||
void prio_queue_reverse(struct prio_queue *);
|
||||
|
||||
#endif /* PRIO_QUEUE_H */
|
Loading…
Add table
Add a link
Reference in a new issue